--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Utilities.h 15d1cdc52677db61eb2806e649f7bc84a39b4287 (15d1cdc5) Text, 31.09 KB
Tff7b72#Tff7b72if LIBRARY_TYPE == LIBRARY_ARDUINO
Tff7b72#Tff7b72include T8b949e<EEPROM.h>
Tff7b72#Tff7b72endif
Tff7b72#Tff7b72include T8b949e<stddef.h>
Tff7b72#Tff7b72include T8b949e"Config.h"
Tff7b72#Tff7b72include T8b949e"LoRa.h"
Tff7b72#Tff7b72include T8b949e"ROM.h"
Tff7b72#Tff7b72include T8b949e"Framing.h"
Tff7b72#Tff7b72include T8b949e"MD5.h"
Tff7b72#Tff7b72if LIBRARY_TYPE == LIBRARY_C
Tff7b72#Tff7b72include T8b949e<time.h>
Tff7b72#Tff7b72include T8b949e<poll.h>
Tff7b72#Tff7b72include T8b949e<unistd.h>
Tff7b72#Tff7b72include T8b949e<pty.h>
Tff7b72#Tff7b72include T8b949e<sys/stat.h>
Tff7b72#Tff7b72include T8b949e<sys/mman.h>
Tff7b72#Tff7b72include T8b949e<fcntl.h>
T8b949e// We need a delay()
Tffa657void Td2a8ffdelayTb4b4b4(Tffa657int Te6edf3msTb4b4b4) Tb4b4b4{
Tff7b72struct T56d364timespec Te6edf3intervalTb4b4b4;
Te6edf3intervalTb4b4b4.Te6edf3tv_sec Tff7b72= Te6edf3ms Tff7b72/ T79c0ff1000Tb4b4b4;
Te6edf3intervalTb4b4b4.Te6edf3tv_nsec Tff7b72= Tb4b4b4(Te6edf3ms Tff7b72% T79c0ff1000Tb4b4b4) Tff7b72* T79c0ff1000 Tff7b72* T79c0ff1000Tb4b4b4;
T8b949e// TODO: handle signals interrupting sleep
Te6edf3nanosleepTb4b4b4(Tff7b72&Te6edf3intervalTb4b4b4, Tffa657NULLTb4b4b4)Tb4b4b4;
Tb4b4b4}
T8b949e// And millis()
Tff7b72struct T56d364timespec Te6edf3millis_baseTb4b4b4;
Tffa657uint32_t Td2a8ffmillisTb4b4b4(Tb4b4b4) Tb4b4b4{
T8b949e// Time since first call is close enough.
Tff7b72static Tffa657bool Te6edf3base_setTb4b4b4(Tffa657falseTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3base_setTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3clock_gettimeTb4b4b4(Te6edf3CLOCK_MONOTONICTb4b4b4, Tff7b72&Te6edf3millis_baseTb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3perrorTb4b4b4(Ta5d6ff"Ta5d6ffCould not get timeTa5d6ff"Tb4b4b4)Tb4b4b4;
Te6edf3exitTb4b4b4(T79c0ff1Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3base_set Tff7b72= Tffa657trueTb4b4b4;
Tb4b4b4}
Tff7b72struct T56d364timespec Te6edf3nowTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3clock_gettimeTb4b4b4(Te6edf3CLOCK_MONOTONICTb4b4b4, Tff7b72&Te6edf3nowTb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3perrorTb4b4b4(Ta5d6ff"Ta5d6ffCould not get timeTa5d6ff"Tb4b4b4)Tb4b4b4;
Te6edf3exitTb4b4b4(T79c0ff1Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72return Tb4b4b4(Te6edf3nowTb4b4b4.Te6edf3tv_sec Tff7b72- Te6edf3millis_baseTb4b4b4.Te6edf3tv_secTb4b4b4) Tff7b72* T79c0ff1000 Tff7b72+ Tb4b4b4(Te6edf3nowTb4b4b4.Te6edf3tv_nsec Tff7b72- Te6edf3millis_baseTb4b4b4.Te6edf3tv_nsecTb4b4b4)Tff7b72/Tb4b4b4(T79c0ff1000Tff7b72*T79c0ff1000Tb4b4b4)Tb4b4b4;
Tb4b4b4}
T8b949e// Serial will want to poll the EEPROM a bit for help text
Tffa657bool Td2a8ffeeprom_info_lockedTb4b4b4(Tb4b4b4)Tb4b4b4;
T8b949e// We also need a Serial
Te6edf3class Te6edf3SerialClass Tb4b4b4{
Te6edf3publicTff7b72:
Tffa657void Te6edf3beginTb4b4b4(Tffa657int Te6edf3baudTb4b4b4) Tb4b4b4{
T8b949e// Need to be rrentrant for restart
Tff7b72if Tb4b4b4(Te6edf3_fd Tff7b72<Tff7b72= T79c0ff0Tb4b4b4) Tb4b4b4{
Tffa657int Te6edf3other_end Tff7b72= T79c0ff0Tb4b4b4;
Tffa657int Te6edf3status Tff7b72= Te6edf3openptyTb4b4b4(Tff7b72&Te6edf3_fdTb4b4b4, Tff7b72&Te6edf3other_endTb4b4b4, Tffa657NULLTb4b4b4, Tffa657NULLTb4b4b4, Tffa657NULLTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3statusTb4b4b4) Tb4b4b4{
Te6edf3perrorTb4b4b4(Ta5d6ff"Ta5d6ffcould not open PTYTa5d6ff"Tb4b4b4)Tb4b4b4;
Te6edf3exitTb4b4b4(T79c0ff1Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3stdTff7b72:Tff7b72:Te6edf3cerr Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ffListening on Ta5d6ff" Tff7b72<Tff7b72< Te6edf3ttynameTb4b4b4(Te6edf3other_endTb4b4b4) Tff7b72<Tff7b72< Te6edf3stdTff7b72:Tff7b72:Te6edf3endlTb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3eeprom_info_lockedTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3stdTff7b72:Tff7b72:Te6edf3cerr Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ffEEPROM configuration is not initialized. You will want to flash it with something like:Ta5d6ff" Tff7b72<Tff7b72< Te6edf3stdTff7b72:Tff7b72:Te6edf3endlTb4b4b4;
Te6edf3stdTff7b72:Tff7b72:Te6edf3cerr Tff7b72<Tff7b72< Ta5d6ff"Tffea00\tTa5d6ffrnodeconf --keyTa5d6ff" Tff7b72<Tff7b72< Te6edf3stdTff7b72:Tff7b72:Te6edf3endlTb4b4b4;
Te6edf3stdTff7b72:Tff7b72:Te6edf3cerr Tff7b72<Tff7b72< Ta5d6ff"Tffea00\tTa5d6ffrnodeconf --rom --platform Ta5d6ff" Tff7b72<Tff7b72< Te6edf3stdTff7b72:Tff7b72:Te6edf3hex Tff7b72<Tff7b72< Te6edf3PLATFORM Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff --product Ta5d6ff" Tff7b72<Tff7b72< Te6edf3PRODUCT_HMBRW Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff --model Ta5d6ff" Tff7b72<Tff7b72< Te6edf3MODEL_FF Tff7b72<Tff7b72< Te6edf3stdTff7b72:Tff7b72:Te6edf3dec Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff --hwrev 1 Ta5d6ff" Tff7b72<Tff7b72< Te6edf3ttynameTb4b4b4(Te6edf3other_endTb4b4b4) Tff7b72<Tff7b72< Te6edf3stdTff7b72:Tff7b72:Te6edf3endlTb4b4b4;
Tb4b4b4}
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3stdTff7b72:Tff7b72:Te6edf3cerr Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ffSkipping Serial reinitializationTa5d6ff" Tff7b72<Tff7b72< Te6edf3stdTff7b72:Tff7b72:Te6edf3endlTb4b4b4;
Tb4b4b4}
Tb4b4b4}
Te6edf3operator Tffa657boolTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3_fd Tff7b72> T79c0ff0Tb4b4b4;
Tb4b4b4}
Tffa657void Te6edf3writeTb4b4b4(Tffa657int Te6edf3bTb4b4b4) Tb4b4b4{
Tffa657uint8_t Te6edf3to_write Tff7b72= Te6edf3bTb4b4b4;
Tffa657ssize_t Te6edf3written Tff7b72= Tff7b72:Tff7b72:Te6edf3writeTb4b4b4(Te6edf3_fdTb4b4b4, Tff7b72&Te6edf3to_writeTb4b4b4, T79c0ff1Tb4b4b4)Tb4b4b4;
Tff7b72while Tb4b4b4(Te6edf3written Tff7b72!Tff7b72= T79c0ff1Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3written Tff7b72< T79c0ff0Tb4b4b4) Tb4b4b4{
Te6edf3perrorTb4b4b4(Ta5d6ff"Ta5d6ffcould not write to PTYTa5d6ff"Tb4b4b4)Tb4b4b4;
Te6edf3exitTb4b4b4(T79c0ff1Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3written Tff7b72= Tff7b72:Tff7b72:Te6edf3writeTb4b4b4(Te6edf3_fdTb4b4b4, Tff7b72&Te6edf3to_writeTb4b4b4, T79c0ff1Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tffa657void Te6edf3writeTb4b4b4(Tff7b72const Tffa657charTff7b72* Te6edf3dataTb4b4b4) Tb4b4b4{
Tff7b72whileTb4b4b4(Tff7b72*Te6edf3dataTb4b4b4) Tb4b4b4{
Te6edf3writeTb4b4b4(Tff7b72*Te6edf3dataTb4b4b4)Tb4b4b4;
Tff7b72+Tff7b72+Te6edf3dataTb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tffa657bool Te6edf3availableTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72struct T56d364pollfd Te6edf3requestTb4b4b4;
Te6edf3requestTb4b4b4.Te6edf3fd Tff7b72= Te6edf3_fdTb4b4b4;
Te6edf3requestTb4b4b4.Te6edf3events Tff7b72= Te6edf3POLLINTb4b4b4;
Te6edf3requestTb4b4b4.Te6edf3revents Tff7b72= T79c0ff0Tb4b4b4;
Tffa657int Te6edf3result Tff7b72= Te6edf3pollTb4b4b4(Tff7b72&Te6edf3requestTb4b4b4, T79c0ff1Tb4b4b4, T79c0ff0Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3result Tff7b72=Tff7b72= T79c0ff-1Tb4b4b4) Tb4b4b4{
Te6edf3perrorTb4b4b4(Ta5d6ff"Ta5d6ffcould not pollTa5d6ff"Tb4b4b4)Tb4b4b4;
Te6edf3exitTb4b4b4(T79c0ff1Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72return Te6edf3result Tff7b72> T79c0ff0Tb4b4b4;
Tb4b4b4}
Tffa657uint8_t Te6edf3readTb4b4b4(Tb4b4b4) Tb4b4b4{
Tffa657uint8_t Te6edf3bufferTb4b4b4;
Tffa657ssize_t Te6edf3count Tff7b72= Tff7b72:Tff7b72:Te6edf3readTb4b4b4(Te6edf3_fdTb4b4b4, Tff7b72&Te6edf3bufferTb4b4b4, T79c0ff1Tb4b4b4)Tb4b4b4;
Tff7b72while Tb4b4b4(Te6edf3count Tff7b72!Tff7b72= T79c0ff1Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3count Tff7b72< T79c0ff0Tb4b4b4) Tb4b4b4{
Te6edf3perrorTb4b4b4(Ta5d6ff"Ta5d6ffcould not read from PTYTa5d6ff"Tb4b4b4)Tb4b4b4;
Te6edf3exitTb4b4b4(T79c0ff1Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3count Tff7b72= Tff7b72:Tff7b72:Te6edf3readTb4b4b4(Te6edf3_fdTb4b4b4, Tff7b72&Te6edf3bufferTb4b4b4, T79c0ff1Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72return Te6edf3bufferTb4b4b4;
Tb4b4b4}
Te6edf3protectedTff7b72:
Tffa657int Te6edf3_fdTb4b4b4;
Tb4b4b4}Tb4b4b4;
Te6edf3SerialClass Te6edf3SerialTb4b4b4;
T8b949e// And random(below);
Tffa657int Td2a8ffrandomTb4b4b4(Tffa657int Te6edf3belowTb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3randTb4b4b4(Tb4b4b4) Tff7b72% Te6edf3belowTb4b4b4;
Tb4b4b4}
Tff7b72#Tff7b72endif
T8b949e// Log a debug message. Message should have a \r to return the cursor, if
T8b949e// needed.
Tffa657void Td2a8ffdebugTb4b4b4(Tff7b72const Tffa657charTff7b72* Te6edf3messageTb4b4b4) Tb4b4b4{
Tff7b72#Tff7b72if LIBRARY_TYPE == LIBRARY_C
Te6edf3stdTff7b72:Tff7b72:Te6edf3cerr Tff7b72<Tff7b72< Te6edf3message Tff7b72<Tff7b72< Te6edf3stdTff7b72:Tff7b72:Te6edf3endlTb4b4b4;
Tff7b72#Tff7b72endif
Tff7b72if Tb4b4b4(Te6edf3SerialTb4b4b4) Tb4b4b4{
Te6edf3SerialTb4b4b4.Te6edf3writeTb4b4b4(Te6edf3messageTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72#Tff7b72if MCU_VARIANT == MCU_ESP32
Tff7b72#Tff7b72include T8b949e"soc/rtc_wdt.h"
Tff7b72#Tff7b72define ISR_VECT IRAM_ATTR
Tff7b72#Tff7b72else
Tff7b72#Tff7b72define ISR_VECT
Tff7b72#Tff7b72endif
Tff7b72#Tff7b72if MCU_VARIANT == MCU_1284P || MCU_VARIANT == MCU_2560
Tff7b72#Tff7b72include T8b949e<avr/wdt.h>
Tff7b72#Tff7b72include T8b949e<util/atomic.h>
Tff7b72#Tff7b72endif
Tffa657uint8_t Te6edf3boot_vector Tff7b72= T79c0ff0x00Tb4b4b4;
Tff7b72#Tff7b72if MCU_VARIANT == MCU_1284P || MCU_VARIANT == MCU_2560
Tffa657uint8_t Te6edf3OPTIBOOT_MCUSR Te6edf3__attribute__ Tb4b4b4(Tb4b4b4(Te6edf3sectionTb4b4b4(Ta5d6ff"Ta5d6ff.noinitTa5d6ff"Tb4b4b4)Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tffa657void Te6edf3resetFlagsInitTb4b4b4(Tffa657voidTb4b4b4) Te6edf3__attribute__ Tb4b4b4(Tb4b4b4(Tff7b72nakedTb4b4b4)Tb4b4b4) Te6edf3__attribute__ Tb4b4b4(Tb4b4b4(Te6edf3usedTb4b4b4)Tb4b4b4) Te6edf3__attribute__ Tb4b4b4(Tb4b4b4(Te6edf3section Tb4b4b4(Ta5d6ff"Ta5d6ff.init0Ta5d6ff"Tb4b4b4)Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tffa657void Td2a8ffresetFlagsInitTb4b4b4(Tffa657voidTb4b4b4) Tb4b4b4{
Te6edf3__asm__ Te6edf3__volatile__ Tb4b4b4(Ta5d6ff"Ta5d6ffsts %0, r2Tffea00\nTa5d6ff" Tff7b72: Ta5d6ff"Ta5d6ff=mTa5d6ff" Tb4b4b4(Te6edf3OPTIBOOT_MCUSRTb4b4b4) Tff7b72:Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72#Tff7b72elif MCU_VARIANT == MCU_ESP32
T8b949e// TODO: Get ESP32 boot flags
Tff7b72#Tff7b72endif
Tff7b72#Tff7b72if MCU_VARIANT == MCU_1284P || MCU_VARIANT == MCU_2560
Tffa657void Td2a8ffled_rx_onTb4b4b4(Tb4b4b4) Tb4b4b4{ Te6edf3digitalWriteTb4b4b4(Te6edf3pin_led_rxTb4b4b4, Te6edf3HIGHTb4b4b4)Tb4b4b4; Tb4b4b4}
Tffa657void Td2a8ffled_rx_offTb4b4b4(Tb4b4b4) Tb4b4b4{ Te6edf3digitalWriteTb4b4b4(Te6edf3pin_led_rxTb4b4b4, Te6edf3LOWTb4b4b4)Tb4b4b4; Tb4b4b4}
Tffa657void Td2a8ffled_tx_onTb4b4b4(Tb4b4b4) Tb4b4b4{ Te6edf3digitalWriteTb4b4b4(Te6edf3pin_led_txTb4b4b4, Te6edf3HIGHTb4b4b4)Tb4b4b4; Tb4b4b4}
Tffa657void Td2a8ffled_tx_offTb4b4b4(Tb4b4b4) Tb4b4b4{ Te6edf3digitalWriteTb4b4b4(Te6edf3pin_led_txTb4b4b4, Te6edf3LOWTb4b4b4)Tb4b4b4; Tb4b4b4}
Tff7b72#Tff7b72elif MCU_VARIANT == MCU_ESP32
Tff7b72#Tff7b72if BOARD_MODEL == BOARD_TBEAM
Tffa657void Td2a8ffled_rx_onTb4b4b4(Tb4b4b4) Tb4b4b4{ Te6edf3digitalWriteTb4b4b4(Te6edf3pin_led_rxTb4b4b4, Te6edf3HIGHTb4b4b4)Tb4b4b4; Tb4b4b4}
Tffa657void Td2a8ffled_rx_offTb4b4b4(Tb4b4b4) Tb4b4b4{ Te6edf3digitalWriteTb4b4b4(Te6edf3pin_led_rxTb4b4b4, Te6edf3LOWTb4b4b4)Tb4b4b4; Tb4b4b4}
Tffa657void Td2a8ffled_tx_onTb4b4b4(Tb4b4b4) Tb4b4b4{ Te6edf3digitalWriteTb4b4b4(Te6edf3pin_led_txTb4b4b4, Te6edf3LOWTb4b4b4)Tb4b4b4; Tb4b4b4}
Tffa657void Td2a8ffled_tx_offTb4b4b4(Tb4b4b4) Tb4b4b4{ Te6edf3digitalWriteTb4b4b4(Te6edf3pin_led_txTb4b4b4, Te6edf3HIGHTb4b4b4)Tb4b4b4; Tb4b4b4}
Tff7b72#Tff7b72elif BOARD_MODEL == BOARD_LORA32_V2_0
Tff7b72#Tff7b72if defined(EXTERNAL_LEDS)
Tffa657void Td2a8ffled_rx_onTb4b4b4(Tb4b4b4) Tb4b4b4{ Te6edf3digitalWriteTb4b4b4(Te6edf3pin_led_rxTb4b4b4, Te6edf3HIGHTb4b4b4)Tb4b4b4; Tb4b4b4}
Tffa657void Td2a8ffled_rx_offTb4b4b4(Tb4b4b4) Tb4b4b4{ Te6edf3digitalWriteTb4b4b4(Te6edf3pin_led_rxTb4b4b4, Te6edf3LOWTb4b4b4)Tb4b4b4; Tb4b4b4}
Tffa657void Td2a8ffled_tx_onTb4b4b4(Tb4b4b4) Tb4b4b4{ Te6edf3digitalWriteTb4b4b4(Te6edf3pin_led_txTb4b4b4, Te6edf3HIGHTb4b4b4)Tb4b4b4; Tb4b4b4}
Tffa657void Td2a8ffled_tx_offTb4b4b4(Tb4b4b4) Tb4b4b4{ Te6edf3digitalWriteTb4b4b4(Te6edf3pin_led_txTb4b4b4, Te6edf3LOWTb4b4b4)Tb4b4b4; Tb4b4b4}
Tff7b72#Tff7b72else
Tffa657void Td2a8ffled_rx_onTb4b4b4(Tb4b4b4) Tb4b4b4{ Te6edf3digitalWriteTb4b4b4(Te6edf3pin_led_rxTb4b4b4, Te6edf3LOWTb4b4b4)Tb4b4b4; Tb4b4b4}
Tffa657void Td2a8ffled_rx_offTb4b4b4(Tb4b4b4) Tb4b4b4{ Te6edf3digitalWriteTb4b4b4(Te6edf3pin_led_rxTb4b4b4, Te6edf3HIGHTb4b4b4)Tb4b4b4; Tb4b4b4}
Tffa657void Td2a8ffled_tx_onTb4b4b4(Tb4b4b4) Tb4b4b4{ Te6edf3digitalWriteTb4b4b4(Te6edf3pin_led_txTb4b4b4, Te6edf3LOWTb4b4b4)Tb4b4b4; Tb4b4b4}
Tffa657void Td2a8ffled_tx_offTb4b4b4(Tb4b4b4) Tb4b4b4{ Te6edf3digitalWriteTb4b4b4(Te6edf3pin_led_txTb4b4b4, Te6edf3HIGHTb4b4b4)Tb4b4b4; Tb4b4b4}
Tff7b72#Tff7b72endif
Tff7b72#Tff7b72elif BOARD_MODEL == BOARD_LORA32_V2_1
Tffa657void Td2a8ffled_rx_onTb4b4b4(Tb4b4b4) Tb4b4b4{ Te6edf3digitalWriteTb4b4b4(Te6edf3pin_led_rxTb4b4b4, Te6edf3HIGHTb4b4b4)Tb4b4b4; Tb4b4b4}
Tffa657void Td2a8ffled_rx_offTb4b4b4(Tb4b4b4) Tb4b4b4{ Te6edf3digitalWriteTb4b4b4(Te6edf3pin_led_rxTb4b4b4, Te6edf3LOWTb4b4b4)Tb4b4b4; Tb4b4b4}
Tffa657void Td2a8ffled_tx_onTb4b4b4(Tb4b4b4) Tb4b4b4{ Te6edf3digitalWriteTb4b4b4(Te6edf3pin_led_txTb4b4b4, Te6edf3HIGHTb4b4b4)Tb4b4b4; Tb4b4b4}
Tffa657void Td2a8ffled_tx_offTb4b4b4(Tb4b4b4) Tb4b4b4{ Te6edf3digitalWriteTb4b4b4(Te6edf3pin_led_txTb4b4b4, Te6edf3LOWTb4b4b4)Tb4b4b4; Tb4b4b4}
Tff7b72#Tff7b72elif BOARD_MODEL == BOARD_HUZZAH32
Tffa657void Td2a8ffled_rx_onTb4b4b4(Tb4b4b4) Tb4b4b4{ Te6edf3digitalWriteTb4b4b4(Te6edf3pin_led_rxTb4b4b4, Te6edf3HIGHTb4b4b4)Tb4b4b4; Tb4b4b4}
Tffa657void Td2a8ffled_rx_offTb4b4b4(Tb4b4b4) Tb4b4b4{ Te6edf3digitalWriteTb4b4b4(Te6edf3pin_led_rxTb4b4b4, Te6edf3LOWTb4b4b4)Tb4b4b4; Tb4b4b4}
Tffa657void Td2a8ffled_tx_onTb4b4b4(Tb4b4b4) Tb4b4b4{ Te6edf3digitalWriteTb4b4b4(Te6edf3pin_led_txTb4b4b4, Te6edf3HIGHTb4b4b4)Tb4b4b4; Tb4b4b4}
Tffa657void Td2a8ffled_tx_offTb4b4b4(Tb4b4b4) Tb4b4b4{ Te6edf3digitalWriteTb4b4b4(Te6edf3pin_led_txTb4b4b4, Te6edf3LOWTb4b4b4)Tb4b4b4; Tb4b4b4}
Tff7b72#Tff7b72elif BOARD_MODEL == BOARD_GENERIC_ESP32
Tffa657void Td2a8ffled_rx_onTb4b4b4(Tb4b4b4) Tb4b4b4{ Te6edf3digitalWriteTb4b4b4(Te6edf3pin_led_rxTb4b4b4, Te6edf3HIGHTb4b4b4)Tb4b4b4; Tb4b4b4}
Tffa657void Td2a8ffled_rx_offTb4b4b4(Tb4b4b4) Tb4b4b4{ Te6edf3digitalWriteTb4b4b4(Te6edf3pin_led_rxTb4b4b4, Te6edf3LOWTb4b4b4)Tb4b4b4; Tb4b4b4}
Tffa657void Td2a8ffled_tx_onTb4b4b4(Tb4b4b4) Tb4b4b4{ Te6edf3digitalWriteTb4b4b4(Te6edf3pin_led_txTb4b4b4, Te6edf3HIGHTb4b4b4)Tb4b4b4; Tb4b4b4}
Tffa657void Td2a8ffled_tx_offTb4b4b4(Tb4b4b4) Tb4b4b4{ Te6edf3digitalWriteTb4b4b4(Te6edf3pin_led_txTb4b4b4, Te6edf3LOWTb4b4b4)Tb4b4b4; Tb4b4b4}
Tff7b72#Tff7b72endif
Tff7b72#Tff7b72elif MCU_VARIANT == MCU_LINUX
T8b949e// No LEDs on Linux, probably. SPI only.
Tffa657void Td2a8ffled_rx_onTb4b4b4(Tb4b4b4) Tb4b4b4{ Tb4b4b4}
Tffa657void Td2a8ffled_rx_offTb4b4b4(Tb4b4b4) Tb4b4b4{ Tb4b4b4}
Tffa657void Td2a8ffled_tx_onTb4b4b4(Tb4b4b4) Tb4b4b4{ Tb4b4b4}
Tffa657void Td2a8ffled_tx_offTb4b4b4(Tb4b4b4) Tb4b4b4{ Tb4b4b4}
Tff7b72#Tff7b72endif
Tff7b72#Tff7b72if LIBRARY_TYPE == LIBRARY_C
T8b949e// hard_reset needs a declaration for main
Tffa657int Td2a8ffmainTb4b4b4(Tffa657int Te6edf3argcTb4b4b4, Tffa657charTff7b72*Tff7b72* Te6edf3argvTb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72endif
Tffa657void Td2a8ffhard_resetTb4b4b4(Tffa657voidTb4b4b4) Tb4b4b4{
Tff7b72#Tff7b72if MCU_VARIANT == MCU_1284P || MCU_VARIANT == MCU_2560
Te6edf3wdt_enableTb4b4b4(Te6edf3WDTO_15MSTb4b4b4)Tb4b4b4;
Tff7b72whileTb4b4b4(Tffa657trueTb4b4b4) Tb4b4b4{
Te6edf3led_tx_onTb4b4b4(Tb4b4b4)Tb4b4b4; Te6edf3led_rx_offTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72#Tff7b72elif MCU_VARIANT == MCU_ESP32
Te6edf3ESPTb4b4b4.Te6edf3restartTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72elif MCU_VARIANT == MCU_LINUX
T8b949e// TODO: re-exec ourselves?
Tff7b72#Tff7b72if LIBRARY_TYPE == LIBRARY_C
Te6edf3stdTff7b72:Tff7b72:Te6edf3cerr Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ffRestartingTa5d6ff" Tff7b72<Tff7b72< Te6edf3stdTff7b72:Tff7b72:Te6edf3endlTb4b4b4;
Te6edf3exitTb4b4b4(Te6edf3mainTb4b4b4(T79c0ff0Tb4b4b4, Tffa657NULLTb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72endif
Tff7b72#Tff7b72endif
Tb4b4b4}
Tffa657void Td2a8ffled_indicate_errorTb4b4b4(Tffa657int Te6edf3cyclesTb4b4b4) Tb4b4b4{
Tff7b72#Tff7b72if LIBRARY_TYPE == LIBRARY_C
Te6edf3stdTff7b72:Tff7b72:Te6edf3cerr Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ffIndicating errorTa5d6ff" Tff7b72<Tff7b72< Te6edf3stdTff7b72:Tff7b72:Te6edf3endlTb4b4b4;
Tff7b72#Tff7b72endif
Tffa657bool Te6edf3forever Tff7b72= Tb4b4b4(Te6edf3cycles Tff7b72=Tff7b72= T79c0ff0Tb4b4b4) Tff7b72? Tffa657true Tff7b72: Tffa657falseTb4b4b4;
Te6edf3cycles Tff7b72= Te6edf3forever Tff7b72? T79c0ff1 Tff7b72: Te6edf3cyclesTb4b4b4;
Tff7b72whileTb4b4b4(Te6edf3cycles Tff7b72> T79c0ff0Tb4b4b4) Tb4b4b4{
Te6edf3led_rx_onTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3led_tx_offTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3delayTb4b4b4(T79c0ff100Tb4b4b4)Tb4b4b4;
Te6edf3led_rx_offTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3led_tx_onTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3delayTb4b4b4(T79c0ff100Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3foreverTb4b4b4) Te6edf3cyclesTff7b72-Tff7b72-Tb4b4b4;
Tb4b4b4}
Te6edf3led_rx_offTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3led_tx_offTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tffa657void Td2a8ffled_indicate_boot_errorTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72#Tff7b72if LIBRARY_TYPE == LIBRARY_C
Te6edf3stdTff7b72:Tff7b72:Te6edf3cerr Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ffIndicating boot errorTa5d6ff" Tff7b72<Tff7b72< Te6edf3stdTff7b72:Tff7b72:Te6edf3endlTb4b4b4;
Tff7b72#Tff7b72endif
Tff7b72while Tb4b4b4(Tffa657trueTb4b4b4) Tb4b4b4{
Te6edf3led_tx_onTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3led_rx_offTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3delayTb4b4b4(T79c0ff10Tb4b4b4)Tb4b4b4;
Te6edf3led_rx_onTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3led_tx_offTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3delayTb4b4b4(T79c0ff5Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tffa657void Td2a8ffled_indicate_warningTb4b4b4(Tffa657int Te6edf3cyclesTb4b4b4) Tb4b4b4{
Tff7b72#Tff7b72if LIBRARY_TYPE == LIBRARY_C
Te6edf3stdTff7b72:Tff7b72:Te6edf3cerr Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ffIndicating warningTa5d6ff" Tff7b72<Tff7b72< Te6edf3stdTff7b72:Tff7b72:Te6edf3endlTb4b4b4;
Tff7b72#Tff7b72endif
Tffa657bool Te6edf3forever Tff7b72= Tb4b4b4(Te6edf3cycles Tff7b72=Tff7b72= T79c0ff0Tb4b4b4) Tff7b72? Tffa657true Tff7b72: Tffa657falseTb4b4b4;
Te6edf3cycles Tff7b72= Te6edf3forever Tff7b72? T79c0ff1 Tff7b72: Te6edf3cyclesTb4b4b4;
Te6edf3led_tx_onTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72whileTb4b4b4(Te6edf3cycles Tff7b72> T79c0ff0Tb4b4b4) Tb4b4b4{
Te6edf3led_tx_offTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3delayTb4b4b4(T79c0ff100Tb4b4b4)Tb4b4b4;
Te6edf3led_tx_onTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3delayTb4b4b4(T79c0ff100Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3foreverTb4b4b4) Te6edf3cyclesTff7b72-Tff7b72-Tb4b4b4;
Tb4b4b4}
Te6edf3led_tx_offTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72#Tff7b72if MCU_VARIANT == MCU_1284P || MCU_VARIANT == MCU_2560 || MCU_VARIANT == MCU_LINUX
Tffa657void Td2a8ffled_indicate_infoTb4b4b4(Tffa657int Te6edf3cyclesTb4b4b4) Tb4b4b4{
Tffa657bool Te6edf3forever Tff7b72= Tb4b4b4(Te6edf3cycles Tff7b72=Tff7b72= T79c0ff0Tb4b4b4) Tff7b72? Tffa657true Tff7b72: Tffa657falseTb4b4b4;
Te6edf3cycles Tff7b72= Te6edf3forever Tff7b72? T79c0ff1 Tff7b72: Te6edf3cyclesTb4b4b4;
Tff7b72whileTb4b4b4(Te6edf3cycles Tff7b72> T79c0ff0Tb4b4b4) Tb4b4b4{
Te6edf3led_rx_offTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3delayTb4b4b4(T79c0ff100Tb4b4b4)Tb4b4b4;
Te6edf3led_rx_onTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3delayTb4b4b4(T79c0ff100Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3foreverTb4b4b4) Te6edf3cyclesTff7b72-Tff7b72-Tb4b4b4;
Tb4b4b4}
Te6edf3led_rx_offTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72#Tff7b72elif MCU_VARIANT == MCU_ESP32
Tff7b72#Tff7b72if BOARD_MODEL == BOARD_LORA32_V2_1
Tffa657void Td2a8ffled_indicate_infoTb4b4b4(Tffa657int Te6edf3cyclesTb4b4b4) Tb4b4b4{
Tffa657bool Te6edf3forever Tff7b72= Tb4b4b4(Te6edf3cycles Tff7b72=Tff7b72= T79c0ff0Tb4b4b4) Tff7b72? Tffa657true Tff7b72: Tffa657falseTb4b4b4;
Te6edf3cycles Tff7b72= Te6edf3forever Tff7b72? T79c0ff1 Tff7b72: Te6edf3cyclesTb4b4b4;
Tff7b72whileTb4b4b4(Te6edf3cycles Tff7b72> T79c0ff0Tb4b4b4) Tb4b4b4{
Te6edf3led_rx_offTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3delayTb4b4b4(T79c0ff100Tb4b4b4)Tb4b4b4;
Te6edf3led_rx_onTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3delayTb4b4b4(T79c0ff100Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3foreverTb4b4b4) Te6edf3cyclesTff7b72-Tff7b72-Tb4b4b4;
Tb4b4b4}
Te6edf3led_rx_offTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72#Tff7b72elif BOARD_MODEL == BOARD_LORA32_V2_0
Tffa657void Td2a8ffled_indicate_infoTb4b4b4(Tffa657int Te6edf3cyclesTb4b4b4) Tb4b4b4{
Tffa657bool Te6edf3forever Tff7b72= Tb4b4b4(Te6edf3cycles Tff7b72=Tff7b72= T79c0ff0Tb4b4b4) Tff7b72? Tffa657true Tff7b72: Tffa657falseTb4b4b4;
Te6edf3cycles Tff7b72= Te6edf3forever Tff7b72? T79c0ff1 Tff7b72: Te6edf3cyclesTb4b4b4;
Tff7b72whileTb4b4b4(Te6edf3cycles Tff7b72> T79c0ff0Tb4b4b4) Tb4b4b4{
Te6edf3led_rx_offTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3delayTb4b4b4(T79c0ff100Tb4b4b4)Tb4b4b4;
Te6edf3led_rx_onTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3delayTb4b4b4(T79c0ff100Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3foreverTb4b4b4) Te6edf3cyclesTff7b72-Tff7b72-Tb4b4b4;
Tb4b4b4}
Te6edf3led_rx_offTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72#Tff7b72else
Tffa657void Td2a8ffled_indicate_infoTb4b4b4(Tffa657int Te6edf3cyclesTb4b4b4) Tb4b4b4{
Tff7b72#Tff7b72if LIBRARY_TYPE == LIBRARY_C
Te6edf3stdTff7b72:Tff7b72:Te6edf3cerr Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ffIndicating infoTa5d6ff" Tff7b72<Tff7b72< Te6edf3stdTff7b72:Tff7b72:Te6edf3endlTb4b4b4;
Tff7b72#Tff7b72endif
Tffa657bool Te6edf3forever Tff7b72= Tb4b4b4(Te6edf3cycles Tff7b72=Tff7b72= T79c0ff0Tb4b4b4) Tff7b72? Tffa657true Tff7b72: Tffa657falseTb4b4b4;
Te6edf3cycles Tff7b72= Te6edf3forever Tff7b72? T79c0ff1 Tff7b72: Te6edf3cyclesTb4b4b4;
Tff7b72whileTb4b4b4(Te6edf3cycles Tff7b72> T79c0ff0Tb4b4b4) Tb4b4b4{
Te6edf3led_tx_offTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3delayTb4b4b4(T79c0ff100Tb4b4b4)Tb4b4b4;
Te6edf3led_tx_onTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3delayTb4b4b4(T79c0ff100Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3foreverTb4b4b4) Te6edf3cyclesTff7b72-Tff7b72-Tb4b4b4;
Tb4b4b4}
Te6edf3led_tx_offTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72#Tff7b72endif
Tff7b72#Tff7b72endif
Tff7b72#Tff7b72if MCU_VARIANT == MCU_1284P || MCU_VARIANT == MCU_2560 || MCU_VARIANT == MCU_ESP32
Tffa657unsigned Tffa657long Te6edf3led_standby_ticks Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72#Tff7b72endif
Tff7b72#Tff7b72if MCU_VARIANT == MCU_1284P || MCU_VARIANT == MCU_2560
Tffa657uint8_t Te6edf3led_standby_min Tff7b72= T79c0ff1Tb4b4b4;
Tffa657uint8_t Te6edf3led_standby_max Tff7b72= T79c0ff40Tb4b4b4;
Tffa657unsigned Tffa657long Te6edf3led_standby_wait Tff7b72= T79c0ff11000Tb4b4b4;
Tff7b72#Tff7b72elif MCU_VARIANT == MCU_ESP32
Tffa657uint8_t Te6edf3led_standby_min Tff7b72= T79c0ff200Tb4b4b4;
Tffa657uint8_t Te6edf3led_standby_max Tff7b72= T79c0ff255Tb4b4b4;
Tffa657uint8_t Te6edf3led_notready_min Tff7b72= T79c0ff0Tb4b4b4;
Tffa657uint8_t Te6edf3led_notready_max Tff7b72= T79c0ff255Tb4b4b4;
Tffa657uint8_t Te6edf3led_notready_value Tff7b72= Te6edf3led_notready_minTb4b4b4;
Tffa657int8_t Te6edf3led_notready_direction Tff7b72= T79c0ff0Tb4b4b4;
Tffa657unsigned Tffa657long Te6edf3led_notready_ticks Tff7b72= T79c0ff0Tb4b4b4;
Tffa657unsigned Tffa657long Te6edf3led_standby_wait Tff7b72= T79c0ff1768Tb4b4b4;
Tffa657unsigned Tffa657long Te6edf3led_notready_wait Tff7b72= T79c0ff150Tb4b4b4;
Tff7b72#Tff7b72endif
Tff7b72#Tff7b72if MCU_VARIANT == MCU_1284P || MCU_VARIANT == MCU_2560 || MCU_VARIANT == MCU_ESP32
Tffa657uint8_t Te6edf3led_standby_value Tff7b72= Te6edf3led_standby_minTb4b4b4;
Tffa657int8_t Te6edf3led_standby_direction Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72#Tff7b72endif
Tff7b72#Tff7b72if MCU_VARIANT == MCU_1284P || MCU_VARIANT == MCU_2560
Tffa657void Td2a8ffled_indicate_standbyTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3led_standby_ticksTff7b72+Tff7b72+Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3led_standby_ticks Tff7b72> Te6edf3led_standby_waitTb4b4b4) Tb4b4b4{
Te6edf3led_standby_ticks Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3led_standby_value Tff7b72<Tff7b72= Te6edf3led_standby_minTb4b4b4) Tb4b4b4{
Te6edf3led_standby_direction Tff7b72= T79c0ff1Tb4b4b4;
Tb4b4b4} Tff7b72else Tff7b72if Tb4b4b4(Te6edf3led_standby_value Tff7b72>Tff7b72= Te6edf3led_standby_maxTb4b4b4) Tb4b4b4{
Te6edf3led_standby_direction Tff7b72= T79c0ff-1Tb4b4b4;
Tb4b4b4}
Te6edf3led_standby_value Tff7b72+Tff7b72= Te6edf3led_standby_directionTb4b4b4;
Te6edf3analogWriteTb4b4b4(Te6edf3pin_led_rxTb4b4b4, Te6edf3led_standby_valueTb4b4b4)Tb4b4b4;
Te6edf3led_tx_offTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72#Tff7b72elif MCU_VARIANT == MCU_ESP32
Tffa657void Td2a8ffled_indicate_standbyTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3led_standby_ticksTff7b72+Tff7b72+Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3led_standby_ticks Tff7b72> Te6edf3led_standby_waitTb4b4b4) Tb4b4b4{
Te6edf3led_standby_ticks Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3led_standby_value Tff7b72<Tff7b72= Te6edf3led_standby_minTb4b4b4) Tb4b4b4{
Te6edf3led_standby_direction Tff7b72= T79c0ff1Tb4b4b4;
Tb4b4b4} Tff7b72else Tff7b72if Tb4b4b4(Te6edf3led_standby_value Tff7b72>Tff7b72= Te6edf3led_standby_maxTb4b4b4) Tb4b4b4{
Te6edf3led_standby_direction Tff7b72= T79c0ff-1Tb4b4b4;
Tb4b4b4}
Te6edf3led_standby_value Tff7b72+Tff7b72= Te6edf3led_standby_directionTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3led_standby_value Tff7b72> T79c0ff253Tb4b4b4) Tb4b4b4{
Te6edf3led_tx_onTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3led_tx_offTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72#Tff7b72if BOARD_MODEL == BOARD_LORA32_V2_1
Tff7b72#Tff7b72if defined(EXTERNAL_LEDS)
Te6edf3led_rx_offTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72endif
Tff7b72#Tff7b72elif BOARD_MODEL == BOARD_LORA32_V2_0
Tff7b72#Tff7b72if defined(EXTERNAL_LEDS)
Te6edf3led_rx_offTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72endif
Tff7b72#Tff7b72else
Te6edf3led_rx_offTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72endif
Tb4b4b4}
Tb4b4b4}
Tff7b72#Tff7b72elif MCU_VARIANT == MCU_LINUX
T8b949e// No LEDs available.
Tffa657void Td2a8ffled_indicate_standbyTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72#Tff7b72if LIBRARY_TYPE == LIBRARY_C
Tff7b72static Tffa657bool Te6edf3printed Tff7b72= Tffa657falseTb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3printedTb4b4b4) Tb4b4b4{
Te6edf3stdTff7b72:Tff7b72:Te6edf3cerr Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ffIndicating standbyTa5d6ff" Tff7b72<Tff7b72< Te6edf3stdTff7b72:Tff7b72:Te6edf3endlTb4b4b4;
Te6edf3printed Tff7b72= Tffa657trueTb4b4b4;
Tb4b4b4}
Tff7b72#Tff7b72endif
Tb4b4b4}
Tff7b72#Tff7b72endif
Tff7b72#Tff7b72if MCU_VARIANT == MCU_1284P || MCU_VARIANT == MCU_2560
Tffa657void Td2a8ffled_indicate_not_readyTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3led_standby_ticksTff7b72+Tff7b72+Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3led_standby_ticks Tff7b72> Te6edf3led_standby_waitTb4b4b4) Tb4b4b4{
Te6edf3led_standby_ticks Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3led_standby_value Tff7b72<Tff7b72= Te6edf3led_standby_minTb4b4b4) Tb4b4b4{
Te6edf3led_standby_direction Tff7b72= T79c0ff1Tb4b4b4;
Tb4b4b4} Tff7b72else Tff7b72if Tb4b4b4(Te6edf3led_standby_value Tff7b72>Tff7b72= Te6edf3led_standby_maxTb4b4b4) Tb4b4b4{
Te6edf3led_standby_direction Tff7b72= T79c0ff-1Tb4b4b4;
Tb4b4b4}
Te6edf3led_standby_value Tff7b72+Tff7b72= Te6edf3led_standby_directionTb4b4b4;
Te6edf3analogWriteTb4b4b4(Te6edf3pin_led_txTb4b4b4, Te6edf3led_standby_valueTb4b4b4)Tb4b4b4;
Te6edf3led_rx_offTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72#Tff7b72elif MCU_VARIANT == MCU_ESP32
Tffa657void Td2a8ffled_indicate_not_readyTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3led_notready_ticksTff7b72+Tff7b72+Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3led_notready_ticks Tff7b72> Te6edf3led_notready_waitTb4b4b4) Tb4b4b4{
Te6edf3led_notready_ticks Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3led_notready_value Tff7b72<Tff7b72= Te6edf3led_notready_minTb4b4b4) Tb4b4b4{
Te6edf3led_notready_direction Tff7b72= T79c0ff1Tb4b4b4;
Tb4b4b4} Tff7b72else Tff7b72if Tb4b4b4(Te6edf3led_notready_value Tff7b72>Tff7b72= Te6edf3led_notready_maxTb4b4b4) Tb4b4b4{
Te6edf3led_notready_direction Tff7b72= T79c0ff-1Tb4b4b4;
Tb4b4b4}
Te6edf3led_notready_value Tff7b72+Tff7b72= Te6edf3led_notready_directionTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3led_notready_value Tff7b72> T79c0ff128Tb4b4b4) Tb4b4b4{
Te6edf3led_tx_onTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3led_tx_offTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72#Tff7b72if BOARD_MODEL == BOARD_LORA32_V2_1
Tff7b72#Tff7b72if defined(EXTERNAL_LEDS)
Te6edf3led_rx_offTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72endif
Tff7b72#Tff7b72elif BOARD_MODEL == BOARD_LORA32_V2_0
Tff7b72#Tff7b72if defined(EXTERNAL_LEDS)
Te6edf3led_rx_offTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72endif
Tff7b72#Tff7b72else
Te6edf3led_rx_offTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72endif
Tb4b4b4}
Tb4b4b4}
Tff7b72#Tff7b72elif MCU_VARIANT == MCU_LINUX
T8b949e// No LEDs available.
Tffa657void Td2a8ffled_indicate_not_readyTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72#Tff7b72if LIBRARY_TYPE == LIBRARY_C
Tff7b72static Tffa657bool Te6edf3printed Tff7b72= Tffa657falseTb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3printedTb4b4b4) Tb4b4b4{
Te6edf3stdTff7b72:Tff7b72:Te6edf3cerr Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ffIndicating not readyTa5d6ff" Tff7b72<Tff7b72< Te6edf3stdTff7b72:Tff7b72:Te6edf3endlTb4b4b4;
Te6edf3printed Tff7b72= Tffa657trueTb4b4b4;
Tb4b4b4}
Tff7b72#Tff7b72endif
Tb4b4b4}
Tff7b72#Tff7b72endif
Tffa657void Td2a8ffescapedSerialWriteTb4b4b4(Tffa657uint8_t Tffa657byteTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tffa657byte Tff7b72=Tff7b72= Te6edf3FENDTb4b4b4) Tb4b4b4{ Te6edf3SerialTb4b4b4.Te6edf3writeTb4b4b4(Te6edf3FESCTb4b4b4)Tb4b4b4; Tffa657byte Tff7b72= Te6edf3TFENDTb4b4b4; Tb4b4b4}
Tff7b72if Tb4b4b4(Tffa657byte Tff7b72=Tff7b72= Te6edf3FESCTb4b4b4) Tb4b4b4{ Te6edf3SerialTb4b4b4.Te6edf3writeTb4b4b4(Te6edf3FESCTb4b4b4)Tb4b4b4; Tffa657byte Tff7b72= Te6edf3TFESCTb4b4b4; Tb4b4b4}
Te6edf3SerialTb4b4b4.Te6edf3writeTb4b4b4(Tffa657byteTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tffa657void Td2a8ffkiss_indicate_resetTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3SerialTb4b4b4.Te6edf3writeTb4b4b4(Te6edf3FENDTb4b4b4)Tb4b4b4;
Te6edf3SerialTb4b4b4.Te6edf3writeTb4b4b4(Te6edf3CMD_RESETTb4b4b4)Tb4b4b4;
Te6edf3SerialTb4b4b4.Te6edf3writeTb4b4b4(Te6edf3CMD_RESET_BYTETb4b4b4)Tb4b4b4;
Te6edf3SerialTb4b4b4.Te6edf3writeTb4b4b4(Te6edf3FENDTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tffa657void Td2a8ffkiss_indicate_errorTb4b4b4(Tffa657uint8_t Te6edf3error_codeTb4b4b4) Tb4b4b4{
Te6edf3SerialTb4b4b4.Te6edf3writeTb4b4b4(Te6edf3FENDTb4b4b4)Tb4b4b4;
Te6edf3SerialTb4b4b4.Te6edf3writeTb4b4b4(Te6edf3CMD_ERRORTb4b4b4)Tb4b4b4;
Te6edf3SerialTb4b4b4.Te6edf3writeTb4b4b4(Te6edf3error_codeTb4b4b4)Tb4b4b4;
Te6edf3SerialTb4b4b4.Te6edf3writeTb4b4b4(Te6edf3FENDTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tffa657void Td2a8ffkiss_indicate_radiostateTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3SerialTb4b4b4.Te6edf3writeTb4b4b4(Te6edf3FENDTb4b4b4)Tb4b4b4;
Te6edf3SerialTb4b4b4.Te6edf3writeTb4b4b4(Te6edf3CMD_RADIO_STATETb4b4b4)Tb4b4b4;
Te6edf3SerialTb4b4b4.Te6edf3writeTb4b4b4(Te6edf3radio_onlineTb4b4b4)Tb4b4b4;
Te6edf3SerialTb4b4b4.Te6edf3writeTb4b4b4(Te6edf3FENDTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tffa657void Td2a8ffkiss_indicate_stat_rxTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3SerialTb4b4b4.Te6edf3writeTb4b4b4(Te6edf3FENDTb4b4b4)Tb4b4b4;
Te6edf3SerialTb4b4b4.Te6edf3writeTb4b4b4(Te6edf3CMD_STAT_RXTb4b4b4)Tb4b4b4;
Te6edf3escapedSerialWriteTb4b4b4(Te6edf3stat_rxTff7b72>Tff7b72>T79c0ff24Tb4b4b4)Tb4b4b4;
Te6edf3escapedSerialWriteTb4b4b4(Te6edf3stat_rxTff7b72>Tff7b72>T79c0ff16Tb4b4b4)Tb4b4b4;
Te6edf3escapedSerialWriteTb4b4b4(Te6edf3stat_rxTff7b72>Tff7b72>T79c0ff8Tb4b4b4)Tb4b4b4;
Te6edf3escapedSerialWriteTb4b4b4(Te6edf3stat_rxTb4b4b4)Tb4b4b4;
Te6edf3SerialTb4b4b4.Te6edf3writeTb4b4b4(Te6edf3FENDTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tffa657void Td2a8ffkiss_indicate_stat_txTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3SerialTb4b4b4.Te6edf3writeTb4b4b4(Te6edf3FENDTb4b4b4)Tb4b4b4;
Te6edf3SerialTb4b4b4.Te6edf3writeTb4b4b4(Te6edf3CMD_STAT_TXTb4b4b4)Tb4b4b4;
Te6edf3escapedSerialWriteTb4b4b4(Te6edf3stat_txTff7b72>Tff7b72>T79c0ff24Tb4b4b4)Tb4b4b4;
Te6edf3escapedSerialWriteTb4b4b4(Te6edf3stat_txTff7b72>Tff7b72>T79c0ff16Tb4b4b4)Tb4b4b4;
Te6edf3escapedSerialWriteTb4b4b4(Te6edf3stat_txTff7b72>Tff7b72>T79c0ff8Tb4b4b4)Tb4b4b4;
Te6edf3escapedSerialWriteTb4b4b4(Te6edf3stat_txTb4b4b4)Tb4b4b4;
Te6edf3SerialTb4b4b4.Te6edf3writeTb4b4b4(Te6edf3FENDTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tffa657void Td2a8ffkiss_indicate_stat_rssiTb4b4b4(Tb4b4b4) Tb4b4b4{
Tffa657uint8_t Te6edf3packet_rssi_val Tff7b72= Tb4b4b4(Tffa657uint8_tTb4b4b4)Tb4b4b4(Te6edf3last_rssiTff7b72+Te6edf3rssi_offsetTb4b4b4)Tb4b4b4;
Te6edf3SerialTb4b4b4.Te6edf3writeTb4b4b4(Te6edf3FENDTb4b4b4)Tb4b4b4;
Te6edf3SerialTb4b4b4.Te6edf3writeTb4b4b4(Te6edf3CMD_STAT_RSSITb4b4b4)Tb4b4b4;
Te6edf3escapedSerialWriteTb4b4b4(Te6edf3packet_rssi_valTb4b4b4)Tb4b4b4;
Te6edf3SerialTb4b4b4.Te6edf3writeTb4b4b4(Te6edf3FENDTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tffa657void Td2a8ffkiss_indicate_stat_snrTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3SerialTb4b4b4.Te6edf3writeTb4b4b4(Te6edf3FENDTb4b4b4)Tb4b4b4;
Te6edf3SerialTb4b4b4.Te6edf3writeTb4b4b4(Te6edf3CMD_STAT_SNRTb4b4b4)Tb4b4b4;
Te6edf3escapedSerialWriteTb4b4b4(Te6edf3last_snr_rawTb4b4b4)Tb4b4b4;
Te6edf3SerialTb4b4b4.Te6edf3writeTb4b4b4(Te6edf3FENDTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tffa657void Td2a8ffkiss_indicate_radio_lockTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3SerialTb4b4b4.Te6edf3writeTb4b4b4(Te6edf3FENDTb4b4b4)Tb4b4b4;
Te6edf3SerialTb4b4b4.Te6edf3writeTb4b4b4(Te6edf3CMD_RADIO_LOCKTb4b4b4)Tb4b4b4;
Te6edf3SerialTb4b4b4.Te6edf3writeTb4b4b4(Te6edf3radio_lockedTb4b4b4)Tb4b4b4;
Te6edf3SerialTb4b4b4.Te6edf3writeTb4b4b4(Te6edf3FENDTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tffa657void Td2a8ffkiss_indicate_spreadingfactorTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3SerialTb4b4b4.Te6edf3writeTb4b4b4(Te6edf3FENDTb4b4b4)Tb4b4b4;
Te6edf3SerialTb4b4b4.Te6edf3writeTb4b4b4(Te6edf3CMD_SFTb4b4b4)Tb4b4b4;
Te6edf3SerialTb4b4b4.Te6edf3writeTb4b4b4(Tb4b4b4(Tffa657uint8_tTb4b4b4)Te6edf3lora_sfTb4b4b4)Tb4b4b4;
Te6edf3SerialTb4b4b4.Te6edf3writeTb4b4b4(Te6edf3FENDTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tffa657void Td2a8ffkiss_indicate_codingrateTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3SerialTb4b4b4.Te6edf3writeTb4b4b4(Te6edf3FENDTb4b4b4)Tb4b4b4;
Te6edf3SerialTb4b4b4.Te6edf3writeTb4b4b4(Te6edf3CMD_CRTb4b4b4)Tb4b4b4;
Te6edf3SerialTb4b4b4.Te6edf3writeTb4b4b4(Tb4b4b4(Tffa657uint8_tTb4b4b4)Te6edf3lora_crTb4b4b4)Tb4b4b4;
Te6edf3SerialTb4b4b4.Te6edf3writeTb4b4b4(Te6edf3FENDTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tffa657void Td2a8ffkiss_indicate_implicit_lengthTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3SerialTb4b4b4.Te6edf3writeTb4b4b4(Te6edf3FENDTb4b4b4)Tb4b4b4;
Te6edf3SerialTb4b4b4.Te6edf3writeTb4b4b4(Te6edf3CMD_IMPLICITTb4b4b4)Tb4b4b4;
Te6edf3SerialTb4b4b4.Te6edf3writeTb4b4b4(Te6edf3implicit_lTb4b4b4)Tb4b4b4;
Te6edf3SerialTb4b4b4.Te6edf3writeTb4b4b4(Te6edf3FENDTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tffa657void Td2a8ffkiss_indicate_txpowerTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3SerialTb4b4b4.Te6edf3writeTb4b4b4(Te6edf3FENDTb4b4b4)Tb4b4b4;
Te6edf3SerialTb4b4b4.Te6edf3writeTb4b4b4(Te6edf3CMD_TXPOWERTb4b4b4)Tb4b4b4;
Te6edf3SerialTb4b4b4.Te6edf3writeTb4b4b4(Tb4b4b4(Tffa657uint8_tTb4b4b4)Te6edf3lora_txpTb4b4b4)Tb4b4b4;
Te6edf3SerialTb4b4b4.Te6edf3writeTb4b4b4(Te6edf3FENDTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tffa657void Td2a8ffkiss_indicate_bandwidthTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3SerialTb4b4b4.Te6edf3writeTb4b4b4(Te6edf3FENDTb4b4b4)Tb4b4b4;
Te6edf3SerialTb4b4b4.Te6edf3writeTb4b4b4(Te6edf3CMD_BANDWIDTHTb4b4b4)Tb4b4b4;
Te6edf3escapedSerialWriteTb4b4b4(Te6edf3lora_bwTff7b72>Tff7b72>T79c0ff24Tb4b4b4)Tb4b4b4;
Te6edf3escapedSerialWriteTb4b4b4(Te6edf3lora_bwTff7b72>Tff7b72>T79c0ff16Tb4b4b4)Tb4b4b4;
Te6edf3escapedSerialWriteTb4b4b4(Te6edf3lora_bwTff7b72>Tff7b72>T79c0ff8Tb4b4b4)Tb4b4b4;
Te6edf3escapedSerialWriteTb4b4b4(Te6edf3lora_bwTb4b4b4)Tb4b4b4;
Te6edf3SerialTb4b4b4.Te6edf3writeTb4b4b4(Te6edf3FENDTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tffa657void Td2a8ffkiss_indicate_frequencyTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3SerialTb4b4b4.Te6edf3writeTb4b4b4(Te6edf3FENDTb4b4b4)Tb4b4b4;
Te6edf3SerialTb4b4b4.Te6edf3writeTb4b4b4(Te6edf3CMD_FREQUENCYTb4b4b4)Tb4b4b4;
Te6edf3escapedSerialWriteTb4b4b4(Te6edf3lora_freqTff7b72>Tff7b72>T79c0ff24Tb4b4b4)Tb4b4b4;
Te6edf3escapedSerialWriteTb4b4b4(Te6edf3lora_freqTff7b72>Tff7b72>T79c0ff16Tb4b4b4)Tb4b4b4;
Te6edf3escapedSerialWriteTb4b4b4(Te6edf3lora_freqTff7b72>Tff7b72>T79c0ff8Tb4b4b4)Tb4b4b4;
Te6edf3escapedSerialWriteTb4b4b4(Te6edf3lora_freqTb4b4b4)Tb4b4b4;
Te6edf3SerialTb4b4b4.Te6edf3writeTb4b4b4(Te6edf3FENDTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tffa657void Td2a8ffkiss_indicate_randomTb4b4b4(Tffa657uint8_t Tffa657byteTb4b4b4) Tb4b4b4{
Te6edf3SerialTb4b4b4.Te6edf3writeTb4b4b4(Te6edf3FENDTb4b4b4)Tb4b4b4;
Te6edf3SerialTb4b4b4.Te6edf3writeTb4b4b4(Te6edf3CMD_RANDOMTb4b4b4)Tb4b4b4;
Te6edf3SerialTb4b4b4.Te6edf3writeTb4b4b4(Tffa657byteTb4b4b4)Tb4b4b4;
Te6edf3SerialTb4b4b4.Te6edf3writeTb4b4b4(Te6edf3FENDTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tffa657void Td2a8ffkiss_indicate_readyTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3SerialTb4b4b4.Te6edf3writeTb4b4b4(Te6edf3FENDTb4b4b4)Tb4b4b4;
Te6edf3SerialTb4b4b4.Te6edf3writeTb4b4b4(Te6edf3CMD_READYTb4b4b4)Tb4b4b4;
Te6edf3SerialTb4b4b4.Te6edf3writeTb4b4b4(T79c0ff0x01Tb4b4b4)Tb4b4b4;
Te6edf3SerialTb4b4b4.Te6edf3writeTb4b4b4(Te6edf3FENDTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tffa657void Td2a8ffkiss_indicate_not_readyTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3SerialTb4b4b4.Te6edf3writeTb4b4b4(Te6edf3FENDTb4b4b4)Tb4b4b4;
Te6edf3SerialTb4b4b4.Te6edf3writeTb4b4b4(Te6edf3CMD_READYTb4b4b4)Tb4b4b4;
Te6edf3SerialTb4b4b4.Te6edf3writeTb4b4b4(T79c0ff0x00Tb4b4b4)Tb4b4b4;
Te6edf3SerialTb4b4b4.Te6edf3writeTb4b4b4(Te6edf3FENDTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tffa657void Td2a8ffkiss_indicate_promiscTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3SerialTb4b4b4.Te6edf3writeTb4b4b4(Te6edf3FENDTb4b4b4)Tb4b4b4;
Te6edf3SerialTb4b4b4.Te6edf3writeTb4b4b4(Te6edf3CMD_PROMISCTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3promiscTb4b4b4) Tb4b4b4{
Te6edf3SerialTb4b4b4.Te6edf3writeTb4b4b4(T79c0ff0x01Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3SerialTb4b4b4.Te6edf3writeTb4b4b4(T79c0ff0x00Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3SerialTb4b4b4.Te6edf3writeTb4b4b4(Te6edf3FENDTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tffa657void Td2a8ffkiss_indicate_detectTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3SerialTb4b4b4.Te6edf3writeTb4b4b4(Te6edf3FENDTb4b4b4)Tb4b4b4;
Te6edf3SerialTb4b4b4.Te6edf3writeTb4b4b4(Te6edf3CMD_DETECTTb4b4b4)Tb4b4b4;
Te6edf3SerialTb4b4b4.Te6edf3writeTb4b4b4(Te6edf3DETECT_RESPTb4b4b4)Tb4b4b4;
Te6edf3SerialTb4b4b4.Te6edf3writeTb4b4b4(Te6edf3FENDTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tffa657void Td2a8ffkiss_indicate_versionTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3SerialTb4b4b4.Te6edf3writeTb4b4b4(Te6edf3FENDTb4b4b4)Tb4b4b4;
Te6edf3SerialTb4b4b4.Te6edf3writeTb4b4b4(Te6edf3CMD_FW_VERSIONTb4b4b4)Tb4b4b4;
Te6edf3SerialTb4b4b4.Te6edf3writeTb4b4b4(Te6edf3MAJ_VERSTb4b4b4)Tb4b4b4;
Te6edf3SerialTb4b4b4.Te6edf3writeTb4b4b4(Te6edf3MIN_VERSTb4b4b4)Tb4b4b4;
Te6edf3SerialTb4b4b4.Te6edf3writeTb4b4b4(Te6edf3FENDTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tffa657void Td2a8ffkiss_indicate_platformTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3SerialTb4b4b4.Te6edf3writeTb4b4b4(Te6edf3FENDTb4b4b4)Tb4b4b4;
Te6edf3SerialTb4b4b4.Te6edf3writeTb4b4b4(Te6edf3CMD_PLATFORMTb4b4b4)Tb4b4b4;
Te6edf3SerialTb4b4b4.Te6edf3writeTb4b4b4(Te6edf3PLATFORMTb4b4b4)Tb4b4b4;
Te6edf3SerialTb4b4b4.Te6edf3writeTb4b4b4(Te6edf3FENDTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tffa657void Td2a8ffkiss_indicate_boardTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3SerialTb4b4b4.Te6edf3writeTb4b4b4(Te6edf3FENDTb4b4b4)Tb4b4b4;
Te6edf3SerialTb4b4b4.Te6edf3writeTb4b4b4(Te6edf3CMD_BOARDTb4b4b4)Tb4b4b4;
Te6edf3SerialTb4b4b4.Te6edf3writeTb4b4b4(Te6edf3BOARD_MODELTb4b4b4)Tb4b4b4;
Te6edf3SerialTb4b4b4.Te6edf3writeTb4b4b4(Te6edf3FENDTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tffa657void Td2a8ffkiss_indicate_mcuTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3SerialTb4b4b4.Te6edf3writeTb4b4b4(Te6edf3FENDTb4b4b4)Tb4b4b4;
Te6edf3SerialTb4b4b4.Te6edf3writeTb4b4b4(Te6edf3CMD_MCUTb4b4b4)Tb4b4b4;
Te6edf3SerialTb4b4b4.Te6edf3writeTb4b4b4(Te6edf3MCU_VARIANTTb4b4b4)Tb4b4b4;
Te6edf3SerialTb4b4b4.Te6edf3writeTb4b4b4(Te6edf3FENDTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72inline Tffa657bool Td2a8ffisSplitPacketTb4b4b4(Tffa657uint8_t Te6edf3headerTb4b4b4) Tb4b4b4{
Tff7b72return Tb4b4b4(Te6edf3header Tff7b72& Te6edf3FLAG_SPLITTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72inline Tffa657uint8_t Td2a8ffpacketSequenceTb4b4b4(Tffa657uint8_t Te6edf3headerTb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3header Tff7b72>Tff7b72> T79c0ff4Tb4b4b4;
Tb4b4b4}
Tffa657void Td2a8ffsetSpreadingFactorTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3radio_onlineTb4b4b4) Te6edf3LoRaTb4b4b4.Te6edf3setSpreadingFactorTb4b4b4(Te6edf3lora_sfTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tffa657void Td2a8ffsetCodingRateTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3radio_onlineTb4b4b4) Te6edf3LoRaTb4b4b4.Te6edf3setCodingRate4Tb4b4b4(Te6edf3lora_crTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tffa657void Td2a8ffset_implicit_lengthTb4b4b4(Tffa657uint8_t Te6edf3lenTb4b4b4) Tb4b4b4{
Te6edf3implicit_l Tff7b72= Te6edf3lenTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3implicit_l Tff7b72!Tff7b72= T79c0ff0Tb4b4b4) Tb4b4b4{
Te6edf3implicit Tff7b72= Tffa657trueTb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3implicit Tff7b72= Tffa657falseTb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tffa657void Td2a8ffsetTXPowerTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3radio_onlineTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3model Tff7b72=Tff7b72= Te6edf3MODEL_A4Tb4b4b4) Te6edf3LoRaTb4b4b4.Te6edf3setTxPowerTb4b4b4(Te6edf3lora_txpTb4b4b4, Te6edf3PA_OUTPUT_RFO_PINTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3model Tff7b72=Tff7b72= Te6edf3MODEL_A9Tb4b4b4) Te6edf3LoRaTb4b4b4.Te6edf3setTxPowerTb4b4b4(Te6edf3lora_txpTb4b4b4, Te6edf3PA_OUTPUT_PA_BOOST_PINTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tffa657void Td2a8ffgetBandwidthTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3radio_onlineTb4b4b4) Tb4b4b4{
Te6edf3lora_bw Tff7b72= Te6edf3LoRaTb4b4b4.Te6edf3getSignalBandwidthTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tffa657void Td2a8ffsetBandwidthTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3radio_onlineTb4b4b4) Tb4b4b4{
Te6edf3LoRaTb4b4b4.Te6edf3setSignalBandwidthTb4b4b4(Te6edf3lora_bwTb4b4b4)Tb4b4b4;
Te6edf3getBandwidthTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tffa657void Td2a8ffgetFrequencyTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3radio_onlineTb4b4b4) Tb4b4b4{
Te6edf3lora_freq Tff7b72= Te6edf3LoRaTb4b4b4.Te6edf3getFrequencyTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tffa657void Td2a8ffsetFrequencyTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3radio_onlineTb4b4b4) Tb4b4b4{
Te6edf3LoRaTb4b4b4.Te6edf3setFrequencyTb4b4b4(Te6edf3lora_freqTb4b4b4)Tb4b4b4;
Te6edf3getFrequencyTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tffa657uint8_t Td2a8ffgetRandomTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3radio_onlineTb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3LoRaTb4b4b4.Te6edf3randomTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Tff7b72return T79c0ff0x00Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tffa657void Td2a8ffpromisc_enableTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3promisc Tff7b72= Tffa657trueTb4b4b4;
Tb4b4b4}
Tffa657void Td2a8ffpromisc_disableTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3promisc Tff7b72= Tffa657falseTb4b4b4;
Tb4b4b4}
Tff7b72#Tff7b72if MCU_VARIANT == MCU_LINUX
T8b949e// On Linux we always use memory-mapped EEPROM
Tffa657uint8_tTff7b72* Te6edf3eeprom_mapping Tff7b72= Tffa657NULLTb4b4b4;
Tff7b72#Tff7b72endif
Tff7b72#Tff7b72if LIBRARY_TYPE == LIBRARY_C
T8b949e// And when using the C library we set it up from a file descriptor.
Tffa657int Te6edf3eeprom_fd Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72#Tff7b72endif
Tffa657void Td2a8ffeeprom_openTb4b4b4(Tffa657int Te6edf3sizeTb4b4b4) Tb4b4b4{
Tff7b72#Tff7b72if MCU_VARIANT == MCU_ESP32
T8b949e// This MCU needs EEPROIM to be begun
Te6edf3EEPROMTb4b4b4.Te6edf3beginTb4b4b4(Te6edf3sizeTb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72elif MCU_VARIANT == MCU_LINUX
T8b949e// We need to use file-backed EEPROM emulation
Tff7b72#Tff7b72if LIBRARY_TYPE == LIBRARY_C
Tff7b72const Tffa657charTff7b72* Te6edf3eeprom_filename Tff7b72= Ta5d6ff"Ta5d6ffeeprom.datTa5d6ff"Tb4b4b4;
T8b949e// We need to be reentrant for restarts
Tff7b72if Tb4b4b4(Te6edf3eeprom_fd Tff7b72<Tff7b72= T79c0ff0Tb4b4b4) Tb4b4b4{
Te6edf3eeprom_fd Tff7b72= Te6edf3openTb4b4b4(Te6edf3eeprom_filenameTb4b4b4, Te6edf3O_RDWR Tff7b72| Te6edf3O_CREATTb4b4b4, T79c0ff0644Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3eeprom_fd Tff7b72<Tff7b72= T79c0ff0Tb4b4b4) Tb4b4b4{
Te6edf3perrorTb4b4b4(Ta5d6ff"Ta5d6ffCould not open EEPROM fileTa5d6ff"Tb4b4b4)Tb4b4b4;
Te6edf3exitTb4b4b4(T79c0ff1Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tffa657int Te6edf3status Tff7b72= Te6edf3ftruncateTb4b4b4(Te6edf3eeprom_fdTb4b4b4, Te6edf3sizeTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3status Tff7b72!Tff7b72= T79c0ff0Tb4b4b4) Tb4b4b4{
Te6edf3perrorTb4b4b4(Ta5d6ff"Ta5d6ffCould not set size of EEPROM fileTa5d6ff"Tb4b4b4)Tb4b4b4;
Te6edf3exitTb4b4b4(T79c0ff1Tb4b4b4)Tb4b4b4;
Tb4b4b4}
T8b949e// Map EEPROM into RAM
Te6edf3eeprom_mapping Tff7b72= Tb4b4b4(Tffa657uint8_tTff7b72*Tb4b4b4) Te6edf3mmapTb4b4b4(Tffa657NULLTb4b4b4, Te6edf3sizeTb4b4b4, Te6edf3PROT_READ Tff7b72| Te6edf3PROT_WRITETb4b4b4, Te6edf3MAP_SHAREDTb4b4b4, Te6edf3eeprom_fdTb4b4b4, T79c0ff0Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3eeprom_mapping Tff7b72=Tff7b72= Tffa657NULLTb4b4b4) Tb4b4b4{
Te6edf3perrorTb4b4b4(Ta5d6ff"Ta5d6ffCould not map EEPROM fileTa5d6ff"Tb4b4b4)Tb4b4b4;
Te6edf3exitTb4b4b4(T79c0ff1Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3stdTff7b72:Tff7b72:Te6edf3cerr Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ffMapped Ta5d6ff" Tff7b72<Tff7b72< Te6edf3eeprom_filename Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff as FD Ta5d6ff" Tff7b72<Tff7b72< Te6edf3eeprom_fd Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff to address Ta5d6ff" Tff7b72<Tff7b72< Tb4b4b4(Tffa657voidTff7b72*Tb4b4b4)Te6edf3eeprom_mapping Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff size Ta5d6ff" Tff7b72<Tff7b72< Te6edf3size Tff7b72<Tff7b72< Te6edf3stdTff7b72:Tff7b72:Te6edf3endlTb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3stdTff7b72:Tff7b72:Te6edf3cerr Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ffSkipping EEPROM reinitializationTa5d6ff" Tff7b72<Tff7b72< Te6edf3stdTff7b72:Tff7b72:Te6edf3endlTb4b4b4;
Tb4b4b4}
Tff7b72#Tff7b72endif
Tff7b72#Tff7b72endif
Tb4b4b4}
Tffa657uint8_t Td2a8ffeeprom_readTb4b4b4(Tffa657uint8_t Te6edf3addrTb4b4b4) Tb4b4b4{
Tff7b72#Tff7b72if MCU_VARIANT == MCU_LINUX
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3eeprom_mappingTb4b4b4) Tb4b4b4{
Te6edf3throw Te6edf3stdTff7b72:Tff7b72:Te6edf3runtime_errorTb4b4b4(Ta5d6ff"Ta5d6ffTried to read EEPROM before opening it!Ta5d6ff"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tffa657int Te6edf3mapped_address Tff7b72= Te6edf3eeprom_addrTb4b4b4(Te6edf3addrTb4b4b4)Tb4b4b4;
Tff7b72return Te6edf3eeprom_mappingTb4b4b4[Te6edf3mapped_addressTb4b4b4]Tb4b4b4;
Tff7b72#Tff7b72else
Tff7b72return Te6edf3EEPROMTb4b4b4.Te6edf3readTb4b4b4(Te6edf3eeprom_addrTb4b4b4(Te6edf3addrTb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72endif
Tb4b4b4}
Tffa657bool Td2a8ffeeprom_info_lockedTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72#Tff7b72if MCU_VARIANT == MCU_LINUX
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3eeprom_mappingTb4b4b4) Tb4b4b4{
Tff7b72return Tffa657falseTb4b4b4;
Tb4b4b4}
Tff7b72#Tff7b72endif
Tffa657uint8_t Te6edf3lock_byte Tff7b72= Te6edf3eeprom_readTb4b4b4(Te6edf3ADDR_INFO_LOCKTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3lock_byte Tff7b72=Tff7b72= Te6edf3INFO_LOCK_BYTETb4b4b4) Tb4b4b4{
Tff7b72return Tffa657trueTb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Tff7b72return Tffa657falseTb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tffa657void Td2a8ffeeprom_updateTb4b4b4(Tffa657int Te6edf3mapped_addrTb4b4b4, Tffa657uint8_t Tffa657byteTb4b4b4) Tb4b4b4{
Tff7b72#Tff7b72if MCU_VARIANT == MCU_1284P || MCU_VARIANT == MCU_2560
Te6edf3EEPROMTb4b4b4.Te6edf3updateTb4b4b4(Te6edf3mapped_addrTb4b4b4, Tffa657byteTb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72elif MCU_VARIANT == MCU_ESP32
Tff7b72if Tb4b4b4(Te6edf3EEPROMTb4b4b4.Te6edf3readTb4b4b4(Te6edf3mapped_addrTb4b4b4) Tff7b72!Tff7b72= Tffa657byteTb4b4b4) Tb4b4b4{
Te6edf3EEPROMTb4b4b4.Te6edf3writeTb4b4b4(Te6edf3mapped_addrTb4b4b4, Tffa657byteTb4b4b4)Tb4b4b4;
Te6edf3EEPROMTb4b4b4.Te6edf3commitTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72#Tff7b72elif MCU_VARIANT == MCU_LINUX
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3eeprom_mappingTb4b4b4) Tb4b4b4{
Te6edf3throw Te6edf3stdTff7b72:Tff7b72:Te6edf3runtime_errorTb4b4b4(Ta5d6ff"Ta5d6ffTried to write EEPROM before opening it!Ta5d6ff"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3eeprom_mappingTb4b4b4[Te6edf3mapped_addrTb4b4b4] Tff7b72= Tffa657byteTb4b4b4;
Tff7b72#Tff7b72endif
Tb4b4b4}
Tffa657void Td2a8ffeeprom_writeTb4b4b4(Tffa657uint8_t Te6edf3addrTb4b4b4, Tffa657uint8_t Tffa657byteTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3eeprom_info_lockedTb4b4b4(Tb4b4b4) Tff7b72&Tff7b72& Te6edf3addr Tff7b72>Tff7b72= T79c0ff0 Tff7b72&Tff7b72& Te6edf3addr Tff7b72< Te6edf3EEPROM_RESERVEDTb4b4b4) Tb4b4b4{
Te6edf3eeprom_updateTb4b4b4(Te6edf3eeprom_addrTb4b4b4(Te6edf3addrTb4b4b4)Tb4b4b4, Tffa657byteTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3kiss_indicate_errorTb4b4b4(Te6edf3ERROR_EEPROM_LOCKEDTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tffa657void Td2a8ffeeprom_eraseTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72for Tb4b4b4(Tffa657int Te6edf3addr Tff7b72= T79c0ff0Tb4b4b4; Te6edf3addr Tff7b72< Te6edf3EEPROM_RESERVEDTb4b4b4; Te6edf3addrTff7b72+Tff7b72+Tb4b4b4) Tb4b4b4{
Te6edf3eeprom_updateTb4b4b4(Te6edf3eeprom_addrTb4b4b4(Te6edf3addrTb4b4b4)Tb4b4b4, T79c0ff0xFFTb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3hard_resetTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tffa657void Td2a8ffeeprom_dump_infoTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72for Tb4b4b4(Tffa657int Te6edf3addr Tff7b72= Te6edf3ADDR_PRODUCTTb4b4b4; Te6edf3addr Tff7b72<Tff7b72= Te6edf3ADDR_INFO_LOCKTb4b4b4; Te6edf3addrTff7b72+Tff7b72+Tb4b4b4) Tb4b4b4{
Tffa657uint8_t Tffa657byte Tff7b72= Te6edf3eeprom_readTb4b4b4(Te6edf3addrTb4b4b4)Tb4b4b4;
Te6edf3escapedSerialWriteTb4b4b4(Tffa657byteTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tffa657void Td2a8ffeeprom_dump_configTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72for Tb4b4b4(Tffa657int Te6edf3addr Tff7b72= Te6edf3ADDR_CONF_SFTb4b4b4; Te6edf3addr Tff7b72<Tff7b72= Te6edf3ADDR_CONF_OKTb4b4b4; Te6edf3addrTff7b72+Tff7b72+Tb4b4b4) Tb4b4b4{
Tffa657uint8_t Tffa657byte Tff7b72= Te6edf3eeprom_readTb4b4b4(Te6edf3addrTb4b4b4)Tb4b4b4;
Te6edf3escapedSerialWriteTb4b4b4(Tffa657byteTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tffa657void Td2a8ffeeprom_dump_allTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72for Tb4b4b4(Tffa657int Te6edf3addr Tff7b72= T79c0ff0Tb4b4b4; Te6edf3addr Tff7b72< Te6edf3EEPROM_RESERVEDTb4b4b4; Te6edf3addrTff7b72+Tff7b72+Tb4b4b4) Tb4b4b4{
Tffa657uint8_t Tffa657byte Tff7b72= Te6edf3eeprom_readTb4b4b4(Te6edf3addrTb4b4b4)Tb4b4b4;
Te6edf3escapedSerialWriteTb4b4b4(Tffa657byteTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tffa657void Td2a8ffkiss_dump_eepromTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3SerialTb4b4b4.Te6edf3writeTb4b4b4(Te6edf3FENDTb4b4b4)Tb4b4b4;
Te6edf3SerialTb4b4b4.Te6edf3writeTb4b4b4(Te6edf3CMD_ROM_READTb4b4b4)Tb4b4b4;
Te6edf3eeprom_dump_allTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3SerialTb4b4b4.Te6edf3writeTb4b4b4(Te6edf3FENDTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tffa657bool Td2a8ffeeprom_product_validTb4b4b4(Tb4b4b4) Tb4b4b4{
Tffa657uint8_t Te6edf3rval Tff7b72= Te6edf3eeprom_readTb4b4b4(Te6edf3ADDR_PRODUCTTb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72if PLATFORM == PLATFORM_AVR
Tff7b72if Tb4b4b4(Te6edf3rval Tff7b72=Tff7b72= Te6edf3PRODUCT_RNODE Tff7b72|Tff7b72| Te6edf3rval Tff7b72=Tff7b72= Te6edf3PRODUCT_HMBRWTb4b4b4) Tb4b4b4{
Tff7b72#Tff7b72elif PLATFORM == PLATFORM_ESP32
Tff7b72if Tb4b4b4(Te6edf3rval Tff7b72=Tff7b72= Te6edf3PRODUCT_RNODE Tff7b72|Tff7b72| Te6edf3rval Tff7b72=Tff7b72= Te6edf3PRODUCT_HMBRW Tff7b72|Tff7b72| Te6edf3rval Tff7b72=Tff7b72= Te6edf3PRODUCT_TBEAM Tff7b72|Tff7b72| Te6edf3rval Tff7b72=Tff7b72= Te6edf3PRODUCT_T32_20 Tff7b72|Tff7b72| Te6edf3rval Tff7b72=Tff7b72= Te6edf3PRODUCT_T32_21Tb4b4b4) Tb4b4b4{
Tff7b72#Tff7b72elif PLATFORM == PLATFORM_LINUX
Tff7b72if Tb4b4b4(Te6edf3rval Tff7b72=Tff7b72= Te6edf3PRODUCT_HMBRWTb4b4b4) Tb4b4b4{
Tff7b72#Tff7b72else
Tff7b72if Tb4b4b4(Tffa657falseTb4b4b4) Tb4b4b4{
Tff7b72#Tff7b72endif
Tff7b72return Tffa657trueTb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Tff7b72#Tff7b72if LIBRARY_TYPE == LIBRARY_C
Te6edf3stdTff7b72:Tff7b72:Te6edf3cerr Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ffUnacceptable platform: Ta5d6ff" Tff7b72<Tff7b72< Te6edf3stdTff7b72:Tff7b72:Te6edf3hex Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff0xTa5d6ff" Tff7b72<Tff7b72< Tb4b4b4(Tffa657intTb4b4b4)Te6edf3rval Tff7b72<Tff7b72< Te6edf3stdTff7b72:Tff7b72:Te6edf3dec Tff7b72<Tff7b72< Te6edf3stdTff7b72:Tff7b72:Te6edf3endlTb4b4b4;
Tff7b72#Tff7b72endif
Tff7b72return Tffa657falseTb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tffa657bool Te6edf3eeprom_model_validTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3model Tff7b72= Te6edf3eeprom_readTb4b4b4(Te6edf3ADDR_MODELTb4b4b4)Tb4b4b4;
Tff7b72#Tff7b72if BOARD_MODEL == BOARD_RNODE
Tff7b72if Tb4b4b4(Te6edf3model Tff7b72=Tff7b72= Te6edf3MODEL_A4 Tff7b72|Tff7b72| Te6edf3model Tff7b72=Tff7b72= Te6edf3MODEL_A9Tb4b4b4) Tb4b4b4{
Tff7b72#Tff7b72elif BOARD_MODEL == BOARD_HMBRW
Tff7b72if Tb4b4b4(Te6edf3model Tff7b72=Tff7b72= Te6edf3MODEL_FFTb4b4b4) Tb4b4b4{
Tff7b72#Tff7b72elif BOARD_MODEL == BOARD_TBEAM
Tff7b72if Tb4b4b4(Te6edf3model Tff7b72=Tff7b72= Te6edf3MODEL_E4 Tff7b72|Tff7b72| Te6edf3model Tff7b72=Tff7b72= Te6edf3MODEL_E9Tb4b4b4) Tb4b4b4{
Tff7b72#Tff7b72elif BOARD_MODEL == BOARD_LORA32_V2_0
Tff7b72if Tb4b4b4(Te6edf3model Tff7b72=Tff7b72= Te6edf3MODEL_B3 Tff7b72|Tff7b72| Te6edf3model Tff7b72=Tff7b72= Te6edf3MODEL_B8Tb4b4b4) Tb4b4b4{
Tff7b72#Tff7b72elif BOARD_MODEL == BOARD_LORA32_V2_1
Tff7b72if Tb4b4b4(Te6edf3model Tff7b72=Tff7b72= Te6edf3MODEL_B4 Tff7b72|Tff7b72| Te6edf3model Tff7b72=Tff7b72= Te6edf3MODEL_B9Tb4b4b4) Tb4b4b4{
Tff7b72#Tff7b72elif BOARD_MODEL == BOARD_HUZZAH32
Tff7b72if Tb4b4b4(Te6edf3model Tff7b72=Tff7b72= Te6edf3MODEL_FFTb4b4b4) Tb4b4b4{
Tff7b72#Tff7b72elif BOARD_MODEL == BOARD_GENERIC_ESP32
Tff7b72if Tb4b4b4(Te6edf3model Tff7b72=Tff7b72= Te6edf3MODEL_FFTb4b4b4) Tb4b4b4{
Tff7b72#Tff7b72else
Tff7b72if Tb4b4b4(Tffa657falseTb4b4b4) Tb4b4b4{
Tff7b72#Tff7b72endif
Tff7b72return Tffa657trueTb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Tff7b72#Tff7b72if LIBRARY_TYPE == LIBRARY_C
Te6edf3stdTff7b72:Tff7b72:Te6edf3cerr Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ffUnacceptable model: Ta5d6ff" Tff7b72<Tff7b72< Te6edf3stdTff7b72:Tff7b72:Te6edf3hex Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff0xTa5d6ff" Tff7b72<Tff7b72< Tb4b4b4(Tffa657intTb4b4b4)Te6edf3model Tff7b72<Tff7b72< Te6edf3stdTff7b72:Tff7b72:Te6edf3dec Tff7b72<Tff7b72< Te6edf3stdTff7b72:Tff7b72:Te6edf3endlTb4b4b4;
Tff7b72#Tff7b72endif
Tff7b72return Tffa657falseTb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tffa657bool Te6edf3eeprom_hwrev_validTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3hwrev Tff7b72= Te6edf3eeprom_readTb4b4b4(Te6edf3ADDR_HW_REVTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3hwrev Tff7b72!Tff7b72= T79c0ff0x00 Tff7b72&Tff7b72& Te6edf3hwrev Tff7b72!Tff7b72= T79c0ff0xFFTb4b4b4) Tb4b4b4{
Tff7b72return Tffa657trueTb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Tff7b72#Tff7b72if LIBRARY_TYPE == LIBRARY_C
Te6edf3stdTff7b72:Tff7b72:Te6edf3cerr Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ffUnacceptable revision: Ta5d6ff" Tff7b72<Tff7b72< Te6edf3stdTff7b72:Tff7b72:Te6edf3hex Tff7b72<Tff7b72< Ta5d6ff"Ta5d6ff0xTa5d6ff" Tff7b72<Tff7b72< Tb4b4b4(Tffa657intTb4b4b4)Te6edf3hwrev Tff7b72<Tff7b72< Te6edf3stdTff7b72:Tff7b72:Te6edf3dec Tff7b72<Tff7b72< Te6edf3stdTff7b72:Tff7b72:Te6edf3endlTb4b4b4;
Tff7b72#Tff7b72endif
Tff7b72return Tffa657falseTb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tffa657bool Te6edf3eeprom_checksum_validTb4b4b4(Tb4b4b4) Tb4b4b4{
Tffa657char Tff7b72*Te6edf3data Tff7b72= Tb4b4b4(Tffa657charTff7b72*Tb4b4b4)Te6edf3mallocTb4b4b4(Te6edf3CHECKSUMMED_SIZETb4b4b4)Tb4b4b4;
Tff7b72for Tb4b4b4(Tffa657uint8_t Te6edf3i Tff7b72= T79c0ff0Tb4b4b4; Te6edf3i Tff7b72< Te6edf3CHECKSUMMED_SIZETb4b4b4; Te6edf3iTff7b72+Tff7b72+Tb4b4b4) Tb4b4b4{
Tffa657char Tffa657byte Tff7b72= Te6edf3eeprom_readTb4b4b4(Te6edf3iTb4b4b4)Tb4b4b4;
Te6edf3dataTb4b4b4[Te6edf3iTb4b4b4] Tff7b72= Tffa657byteTb4b4b4;
Tb4b4b4}
Tffa657unsigned Tffa657char Tff7b72*Te6edf3hash Tff7b72= Te6edf3MD5Tff7b72:Tff7b72:Te6edf3make_hashTb4b4b4(Te6edf3dataTb4b4b4, Te6edf3CHECKSUMMED_SIZETb4b4b4)Tb4b4b4;
Tffa657bool Te6edf3checksum_valid Tff7b72= Tffa657trueTb4b4b4;
Tff7b72for Tb4b4b4(Tffa657uint8_t Te6edf3i Tff7b72= T79c0ff0Tb4b4b4; Te6edf3i Tff7b72< T79c0ff16Tb4b4b4; Te6edf3iTff7b72+Tff7b72+Tb4b4b4) Tb4b4b4{
Tffa657uint8_t Te6edf3stored_chk_byte Tff7b72= Te6edf3eeprom_readTb4b4b4(Te6edf3ADDR_CHKSUMTff7b72+Te6edf3iTb4b4b4)Tb4b4b4;
Tffa657uint8_t Te6edf3calced_chk_byte Tff7b72= Tb4b4b4(Tffa657uint8_tTb4b4b4)Te6edf3hashTb4b4b4[Te6edf3iTb4b4b4]Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3stored_chk_byte Tff7b72!Tff7b72= Te6edf3calced_chk_byteTb4b4b4) Tb4b4b4{
Te6edf3checksum_valid Tff7b72= Tffa657falseTb4b4b4;
Tb4b4b4}
Tb4b4b4}
Te6edf3freeTb4b4b4(Te6edf3hashTb4b4b4)Tb4b4b4;
Te6edf3freeTb4b4b4(Te6edf3dataTb4b4b4)Tb4b4b4;
Tff7b72return Te6edf3checksum_validTb4b4b4;
Tb4b4b4}
Tffa657bool Te6edf3eeprom_have_confTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3eeprom_readTb4b4b4(Te6edf3ADDR_CONF_OKTb4b4b4) Tff7b72=Tff7b72= Te6edf3CONF_OK_BYTETb4b4b4) Tb4b4b4{
Tff7b72return Tffa657trueTb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Tff7b72return Tffa657falseTb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tffa657void Te6edf3eeprom_conf_loadTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3eeprom_have_confTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3lora_sf Tff7b72= Te6edf3eeprom_readTb4b4b4(Te6edf3ADDR_CONF_SFTb4b4b4)Tb4b4b4;
Te6edf3lora_cr Tff7b72= Te6edf3eeprom_readTb4b4b4(Te6edf3ADDR_CONF_CRTb4b4b4)Tb4b4b4;
Te6edf3lora_txp Tff7b72= Te6edf3eeprom_readTb4b4b4(Te6edf3ADDR_CONF_TXPTb4b4b4)Tb4b4b4;
Te6edf3lora_freq Tff7b72= Tb4b4b4(Tffa657uint32_tTb4b4b4)Te6edf3eeprom_readTb4b4b4(Te6edf3ADDR_CONF_FREQTff7b72+T79c0ff0x00Tb4b4b4) Tff7b72<Tff7b72< T79c0ff24 Tff7b72| Tb4b4b4(Tffa657uint32_tTb4b4b4)Te6edf3eeprom_readTb4b4b4(Te6edf3ADDR_CONF_FREQTff7b72+T79c0ff0x01Tb4b4b4) Tff7b72<Tff7b72< T79c0ff16 Tff7b72| Tb4b4b4(Tffa657uint32_tTb4b4b4)Te6edf3eeprom_readTb4b4b4(Te6edf3ADDR_CONF_FREQTff7b72+T79c0ff0x02Tb4b4b4) Tff7b72<Tff7b72< T79c0ff8 Tff7b72| Tb4b4b4(Tffa657uint32_tTb4b4b4)Te6edf3eeprom_readTb4b4b4(Te6edf3ADDR_CONF_FREQTff7b72+T79c0ff0x03Tb4b4b4)Tb4b4b4;
Te6edf3lora_bw Tff7b72= Tb4b4b4(Tffa657uint32_tTb4b4b4)Te6edf3eeprom_readTb4b4b4(Te6edf3ADDR_CONF_BWTff7b72+T79c0ff0x00Tb4b4b4) Tff7b72<Tff7b72< T79c0ff24 Tff7b72| Tb4b4b4(Tffa657uint32_tTb4b4b4)Te6edf3eeprom_readTb4b4b4(Te6edf3ADDR_CONF_BWTff7b72+T79c0ff0x01Tb4b4b4) Tff7b72<Tff7b72< T79c0ff16 Tff7b72| Tb4b4b4(Tffa657uint32_tTb4b4b4)Te6edf3eeprom_readTb4b4b4(Te6edf3ADDR_CONF_BWTff7b72+T79c0ff0x02Tb4b4b4) Tff7b72<Tff7b72< T79c0ff8 Tff7b72| Tb4b4b4(Tffa657uint32_tTb4b4b4)Te6edf3eeprom_readTb4b4b4(Te6edf3ADDR_CONF_BWTff7b72+T79c0ff0x03Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tffa657void Te6edf3eeprom_conf_saveTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3hw_ready Tff7b72&Tff7b72& Te6edf3radio_onlineTb4b4b4) Tb4b4b4{
Te6edf3eeprom_updateTb4b4b4(Te6edf3eeprom_addrTb4b4b4(Te6edf3ADDR_CONF_SFTb4b4b4)Tb4b4b4, Te6edf3lora_sfTb4b4b4)Tb4b4b4;
Te6edf3eeprom_updateTb4b4b4(Te6edf3eeprom_addrTb4b4b4(Te6edf3ADDR_CONF_CRTb4b4b4)Tb4b4b4, Te6edf3lora_crTb4b4b4)Tb4b4b4;
Te6edf3eeprom_updateTb4b4b4(Te6edf3eeprom_addrTb4b4b4(Te6edf3ADDR_CONF_TXPTb4b4b4)Tb4b4b4, Te6edf3lora_txpTb4b4b4)Tb4b4b4;
Te6edf3eeprom_updateTb4b4b4(Te6edf3eeprom_addrTb4b4b4(Te6edf3ADDR_CONF_BWTb4b4b4)Tff7b72+T79c0ff0x00Tb4b4b4, Te6edf3lora_bwTff7b72>Tff7b72>T79c0ff24Tb4b4b4)Tb4b4b4;
Te6edf3eeprom_updateTb4b4b4(Te6edf3eeprom_addrTb4b4b4(Te6edf3ADDR_CONF_BWTb4b4b4)Tff7b72+T79c0ff0x01Tb4b4b4, Te6edf3lora_bwTff7b72>Tff7b72>T79c0ff16Tb4b4b4)Tb4b4b4;
Te6edf3eeprom_updateTb4b4b4(Te6edf3eeprom_addrTb4b4b4(Te6edf3ADDR_CONF_BWTb4b4b4)Tff7b72+T79c0ff0x02Tb4b4b4, Te6edf3lora_bwTff7b72>Tff7b72>T79c0ff8Tb4b4b4)Tb4b4b4;
Te6edf3eeprom_updateTb4b4b4(Te6edf3eeprom_addrTb4b4b4(Te6edf3ADDR_CONF_BWTb4b4b4)Tff7b72+T79c0ff0x03Tb4b4b4, Te6edf3lora_bwTb4b4b4)Tb4b4b4;
Te6edf3eeprom_updateTb4b4b4(Te6edf3eeprom_addrTb4b4b4(Te6edf3ADDR_CONF_FREQTb4b4b4)Tff7b72+T79c0ff0x00Tb4b4b4, Te6edf3lora_freqTff7b72>Tff7b72>T79c0ff24Tb4b4b4)Tb4b4b4;
Te6edf3eeprom_updateTb4b4b4(Te6edf3eeprom_addrTb4b4b4(Te6edf3ADDR_CONF_FREQTb4b4b4)Tff7b72+T79c0ff0x01Tb4b4b4, Te6edf3lora_freqTff7b72>Tff7b72>T79c0ff16Tb4b4b4)Tb4b4b4;
Te6edf3eeprom_updateTb4b4b4(Te6edf3eeprom_addrTb4b4b4(Te6edf3ADDR_CONF_FREQTb4b4b4)Tff7b72+T79c0ff0x02Tb4b4b4, Te6edf3lora_freqTff7b72>Tff7b72>T79c0ff8Tb4b4b4)Tb4b4b4;
Te6edf3eeprom_updateTb4b4b4(Te6edf3eeprom_addrTb4b4b4(Te6edf3ADDR_CONF_FREQTb4b4b4)Tff7b72+T79c0ff0x03Tb4b4b4, Te6edf3lora_freqTb4b4b4)Tb4b4b4;
Te6edf3eeprom_updateTb4b4b4(Te6edf3eeprom_addrTb4b4b4(Te6edf3ADDR_CONF_OKTb4b4b4)Tb4b4b4, Te6edf3CONF_OK_BYTETb4b4b4)Tb4b4b4;
Te6edf3led_indicate_infoTb4b4b4(T79c0ff10Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3led_indicate_warningTb4b4b4(T79c0ff10Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tffa657void Te6edf3eeprom_conf_deleteTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3eeprom_updateTb4b4b4(Te6edf3eeprom_addrTb4b4b4(Te6edf3ADDR_CONF_OKTb4b4b4)Tb4b4b4, T79c0ff0x00Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tffa657void Te6edf3unlock_romTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3led_indicate_errorTb4b4b4(T79c0ff50Tb4b4b4)Tb4b4b4;
Te6edf3eeprom_eraseTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72typedef Tff7b72struct T56d364FIFOBuffer
Tb4b4b4{
Tffa657unsigned Tffa657char Tff7b72*Te6edf3beginTb4b4b4;
Tffa657unsigned Tffa657char Tff7b72*Te6edf3endTb4b4b4;
Tffa657unsigned Tffa657char Tff7b72* Tff7b72volatile Te6edf3headTb4b4b4;
Tffa657unsigned Tffa657char Tff7b72* Tff7b72volatile Te6edf3tailTb4b4b4;
Tb4b4b4} Te6edf3FIFOBufferTb4b4b4;
Tff7b72inline Tffa657bool Te6edf3fifo_isemptyTb4b4b4(Tff7b72const Te6edf3FIFOBuffer Tff7b72*Te6edf3fTb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3fTff7b72-Tff7b72>Te6edf3head Tff7b72=Tff7b72= Te6edf3fTff7b72-Tff7b72>Te6edf3tailTb4b4b4;
Tb4b4b4}
Tff7b72inline Tffa657bool Te6edf3fifo_isfullTb4b4b4(Tff7b72const Te6edf3FIFOBuffer Tff7b72*Te6edf3fTb4b4b4) Tb4b4b4{
Tff7b72return Tb4b4b4(Tb4b4b4(Te6edf3fTff7b72-Tff7b72>Te6edf3head Tff7b72=Tff7b72= Te6edf3fTff7b72-Tff7b72>Te6edf3beginTb4b4b4) Tff7b72&Tff7b72& Tb4b4b4(Te6edf3fTff7b72-Tff7b72>Te6edf3tail Tff7b72=Tff7b72= Te6edf3fTff7b72-Tff7b72>Te6edf3endTb4b4b4)Tb4b4b4) Tff7b72|Tff7b72| Tb4b4b4(Te6edf3fTff7b72-Tff7b72>Te6edf3tail Tff7b72=Tff7b72= Te6edf3fTff7b72-Tff7b72>Te6edf3head Tff7b72- T79c0ff1Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72inline Tffa657void Te6edf3fifo_pushTb4b4b4(Te6edf3FIFOBuffer Tff7b72*Te6edf3fTb4b4b4, Tffa657unsigned Tffa657char Te6edf3cTb4b4b4) Tb4b4b4{
Tff7b72*Tb4b4b4(Te6edf3fTff7b72-Tff7b72>Te6edf3tailTb4b4b4) Tff7b72= Te6edf3cTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3fTff7b72-Tff7b72>Te6edf3tail Tff7b72=Tff7b72= Te6edf3fTff7b72-Tff7b72>Te6edf3endTb4b4b4) Tb4b4b4{
Te6edf3fTff7b72-Tff7b72>Te6edf3tail Tff7b72= Te6edf3fTff7b72-Tff7b72>Te6edf3beginTb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3fTff7b72-Tff7b72>Te6edf3tailTff7b72+Tff7b72+Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72inline Tffa657unsigned Tffa657char Te6edf3fifo_popTb4b4b4(Te6edf3FIFOBuffer Tff7b72*Te6edf3fTb4b4b4) Tb4b4b4{
Tff7b72ifTb4b4b4(Te6edf3fTff7b72-Tff7b72>Te6edf3head Tff7b72=Tff7b72= Te6edf3fTff7b72-Tff7b72>Te6edf3endTb4b4b4) Tb4b4b4{
Te6edf3fTff7b72-Tff7b72>Te6edf3head Tff7b72= Te6edf3fTff7b72-Tff7b72>Te6edf3beginTb4b4b4;
Tff7b72return Tff7b72*Tb4b4b4(Te6edf3fTff7b72-Tff7b72>Te6edf3endTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Tff7b72return Tff7b72*Tb4b4b4(Te6edf3fTff7b72-Tff7b72>Te6edf3headTff7b72+Tff7b72+Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72inline Tffa657void Te6edf3fifo_flushTb4b4b4(Te6edf3FIFOBuffer Tff7b72*Te6edf3fTb4b4b4) Tb4b4b4{
Te6edf3fTff7b72-Tff7b72>Te6edf3head Tff7b72= Te6edf3fTff7b72-Tff7b72>Te6edf3tailTb4b4b4;
Tb4b4b4}
Tff7b72#Tff7b72if SERIAL_EVENTS == SERIAL_INTERRUPT
Tff7b72static Tff7b72inline Tffa657bool Te6edf3fifo_isempty_lockedTb4b4b4(Tff7b72const Te6edf3FIFOBuffer Tff7b72*Te6edf3fTb4b4b4) Tb4b4b4{
Tffa657bool Te6edf3resultTb4b4b4;
Te6edf3ATOMIC_BLOCKTb4b4b4(Te6edf3ATOMIC_RESTORESTATETb4b4b4) Tb4b4b4{
Te6edf3result Tff7b72= Te6edf3fifo_isemptyTb4b4b4(Te6edf3fTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72return Te6edf3resultTb4b4b4;
Tb4b4b4}
Tff7b72static Tff7b72inline Tffa657bool Te6edf3fifo_isfull_lockedTb4b4b4(Tff7b72const Te6edf3FIFOBuffer Tff7b72*Te6edf3fTb4b4b4) Tb4b4b4{
Tffa657bool Te6edf3resultTb4b4b4;
Te6edf3ATOMIC_BLOCKTb4b4b4(Te6edf3ATOMIC_RESTORESTATETb4b4b4) Tb4b4b4{
Te6edf3result Tff7b72= Te6edf3fifo_isfullTb4b4b4(Te6edf3fTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72return Te6edf3resultTb4b4b4;
Tb4b4b4}
Tff7b72static Tff7b72inline Tffa657void Te6edf3fifo_push_lockedTb4b4b4(Te6edf3FIFOBuffer Tff7b72*Te6edf3fTb4b4b4, Tffa657unsigned Tffa657char Te6edf3cTb4b4b4) Tb4b4b4{
Te6edf3ATOMIC_BLOCKTb4b4b4(Te6edf3ATOMIC_RESTORESTATETb4b4b4) Tb4b4b4{
Te6edf3fifo_pushTb4b4b4(Te6edf3fTb4b4b4, Te6edf3cTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72#Tff7b72endif
T8b949e/*
static inline unsigned char fifo_pop_locked(FIFOBuffer *f) {
unsigned char c;
ATOMIC_BLOCK(ATOMIC_RESTORESTATE) {
c = fifo_pop(f);
}
return c;
}
*/
Tff7b72inline Tffa657void Te6edf3fifo_initTb4b4b4(Te6edf3FIFOBuffer Tff7b72*Te6edf3fTb4b4b4, Tffa657unsigned Tffa657char Tff7b72*Te6edf3bufferTb4b4b4, Tffa657size_t Te6edf3sizeTb4b4b4) Tb4b4b4{
Te6edf3fTff7b72-Tff7b72>Te6edf3head Tff7b72= Te6edf3fTff7b72-Tff7b72>Te6edf3tail Tff7b72= Te6edf3fTff7b72-Tff7b72>Te6edf3begin Tff7b72= Te6edf3bufferTb4b4b4;
Te6edf3fTff7b72-Tff7b72>Te6edf3end Tff7b72= Te6edf3buffer Tff7b72+ Te6edf3sizeTb4b4b4;
Tb4b4b4}
Tff7b72inline Tffa657size_t Te6edf3fifo_lenTb4b4b4(Te6edf3FIFOBuffer Tff7b72*Te6edf3fTb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3fTff7b72-Tff7b72>Te6edf3end Tff7b72- Te6edf3fTff7b72-Tff7b72>Te6edf3beginTb4b4b4;
Tb4b4b4}
Tff7b72typedef Tff7b72struct T56d364FIFOBuffer16
Tb4b4b4{
Tffa657uint16_t Tff7b72*Te6edf3beginTb4b4b4;
Tffa657uint16_t Tff7b72*Te6edf3endTb4b4b4;
Tffa657uint16_t Tff7b72* Tff7b72volatile Te6edf3headTb4b4b4;
Tffa657uint16_t Tff7b72* Tff7b72volatile Te6edf3tailTb4b4b4;
Tb4b4b4} Te6edf3FIFOBuffer16Tb4b4b4;
Tff7b72inline Tffa657bool Te6edf3fifo16_isemptyTb4b4b4(Tff7b72const Te6edf3FIFOBuffer16 Tff7b72*Te6edf3fTb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3fTff7b72-Tff7b72>Te6edf3head Tff7b72=Tff7b72= Te6edf3fTff7b72-Tff7b72>Te6edf3tailTb4b4b4;
Tb4b4b4}
Tff7b72inline Tffa657bool Te6edf3fifo16_isfullTb4b4b4(Tff7b72const Te6edf3FIFOBuffer16 Tff7b72*Te6edf3fTb4b4b4) Tb4b4b4{
Tff7b72return Tb4b4b4(Tb4b4b4(Te6edf3fTff7b72-Tff7b72>Te6edf3head Tff7b72=Tff7b72= Te6edf3fTff7b72-Tff7b72>Te6edf3beginTb4b4b4) Tff7b72&Tff7b72& Tb4b4b4(Te6edf3fTff7b72-Tff7b72>Te6edf3tail Tff7b72=Tff7b72= Te6edf3fTff7b72-Tff7b72>Te6edf3endTb4b4b4)Tb4b4b4) Tff7b72|Tff7b72| Tb4b4b4(Te6edf3fTff7b72-Tff7b72>Te6edf3tail Tff7b72=Tff7b72= Te6edf3fTff7b72-Tff7b72>Te6edf3head Tff7b72- T79c0ff1Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72inline Tffa657void Te6edf3fifo16_pushTb4b4b4(Te6edf3FIFOBuffer16 Tff7b72*Te6edf3fTb4b4b4, Tffa657uint16_t Te6edf3cTb4b4b4) Tb4b4b4{
Tff7b72*Tb4b4b4(Te6edf3fTff7b72-Tff7b72>Te6edf3tailTb4b4b4) Tff7b72= Te6edf3cTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3fTff7b72-Tff7b72>Te6edf3tail Tff7b72=Tff7b72= Te6edf3fTff7b72-Tff7b72>Te6edf3endTb4b4b4) Tb4b4b4{
Te6edf3fTff7b72-Tff7b72>Te6edf3tail Tff7b72= Te6edf3fTff7b72-Tff7b72>Te6edf3beginTb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3fTff7b72-Tff7b72>Te6edf3tailTff7b72+Tff7b72+Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72inline Tffa657uint16_t Te6edf3fifo16_popTb4b4b4(Te6edf3FIFOBuffer16 Tff7b72*Te6edf3fTb4b4b4) Tb4b4b4{
Tff7b72ifTb4b4b4(Te6edf3fTff7b72-Tff7b72>Te6edf3head Tff7b72=Tff7b72= Te6edf3fTff7b72-Tff7b72>Te6edf3endTb4b4b4) Tb4b4b4{
Te6edf3fTff7b72-Tff7b72>Te6edf3head Tff7b72= Te6edf3fTff7b72-Tff7b72>Te6edf3beginTb4b4b4;
Tff7b72return Tff7b72*Tb4b4b4(Te6edf3fTff7b72-Tff7b72>Te6edf3endTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Tff7b72return Tff7b72*Tb4b4b4(Te6edf3fTff7b72-Tff7b72>Te6edf3headTff7b72+Tff7b72+Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72inline Tffa657void Te6edf3fifo16_flushTb4b4b4(Te6edf3FIFOBuffer16 Tff7b72*Te6edf3fTb4b4b4) Tb4b4b4{
Te6edf3fTff7b72-Tff7b72>Te6edf3head Tff7b72= Te6edf3fTff7b72-Tff7b72>Te6edf3tailTb4b4b4;
Tb4b4b4}
Tff7b72#Tff7b72if SERIAL_EVENTS == SERIAL_INTERRUPT
Tff7b72static Tff7b72inline Tffa657bool Te6edf3fifo16_isempty_lockedTb4b4b4(Tff7b72const Te6edf3FIFOBuffer16 Tff7b72*Te6edf3fTb4b4b4) Tb4b4b4{
Tffa657bool Te6edf3resultTb4b4b4;
Te6edf3ATOMIC_BLOCKTb4b4b4(Te6edf3ATOMIC_RESTORESTATETb4b4b4) Tb4b4b4{
Te6edf3result Tff7b72= Te6edf3fifo16_isemptyTb4b4b4(Te6edf3fTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72return Te6edf3resultTb4b4b4;
Tb4b4b4}
Tff7b72#Tff7b72endif
T8b949e/*
static inline bool fifo16_isfull_locked(const FIFOBuffer16 *f) {
bool result;
ATOMIC_BLOCK(ATOMIC_RESTORESTATE) {
result = fifo16_isfull(f);
}
return result;
}
static inline void fifo16_push_locked(FIFOBuffer16 *f, uint16_t c) {
ATOMIC_BLOCK(ATOMIC_RESTORESTATE) {
fifo16_push(f, c);
}
}
static inline size_t fifo16_pop_locked(FIFOBuffer16 *f) {
size_t c;
ATOMIC_BLOCK(ATOMIC_RESTORESTATE) {
c = fifo16_pop(f);
}
return c;
}
*/
Tff7b72inline Tffa657void Te6edf3fifo16_initTb4b4b4(Te6edf3FIFOBuffer16 Tff7b72*Te6edf3fTb4b4b4, Tffa657uint16_t Tff7b72*Te6edf3bufferTb4b4b4, Tffa657uint16_t Te6edf3sizeTb4b4b4) Tb4b4b4{
Te6edf3fTff7b72-Tff7b72>Te6edf3head Tff7b72= Te6edf3fTff7b72-Tff7b72>Te6edf3tail Tff7b72= Te6edf3fTff7b72-Tff7b72>Te6edf3begin Tff7b72= Te6edf3bufferTb4b4b4;
Te6edf3fTff7b72-Tff7b72>Te6edf3end Tff7b72= Te6edf3buffer Tff7b72+ Te6edf3sizeTb4b4b4;
Tb4b4b4}
Tff7b72inline Tffa657uint16_t Te6edf3fifo16_lenTb4b4b4(Te6edf3FIFOBuffer16 Tff7b72*Te6edf3fTb4b4b4) Tb4b4b4{
Tff7b72return Tb4b4b4(Te6edf3fTff7b72-Tff7b72>Te6edf3end Tff7b72- Te6edf3fTff7b72-Tff7b72>Te6edf3beginTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72#Tff7b72if BOARD_MODEL == BOARD_TBEAM
Tff7b72#Tff7b72include T8b949e<axp20x.h>
Te6edf3AXP20X_Class Te6edf3PMUTb4b4b4;
Tffa657bool Te6edf3initPMUTb4b4b4(Tb4b4b4)
Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3PMUTb4b4b4.Te6edf3beginTb4b4b4(Te6edf3WireTb4b4b4, Te6edf3AXP192_SLAVE_ADDRESSTb4b4b4) Tff7b72=Tff7b72= Te6edf3AXP_FAILTb4b4b4) Tb4b4b4{
Tff7b72return Tffa657falseTb4b4b4;
Tb4b4b4}
T8b949e/*
* The charging indicator can be turned on or off
* * * */
Te6edf3PMUTb4b4b4.Te6edf3setChgLEDModeTb4b4b4(Te6edf3AXP20X_LED_OFFTb4b4b4)Tb4b4b4;
T8b949e/*
* The default ESP32 power supply has been turned on,
* no need to set, please do not set it, if it is turned off,
* it will not be able to program
*
* PMU.setDCDC3Voltage(3300);
* PMU.setPowerOutPut(AXP192_DCDC3, AXP202_ON);
*
* * * */
T8b949e/*
* Turn off unused power sources to save power
* **/
Te6edf3PMUTb4b4b4.Te6edf3setPowerOutPutTb4b4b4(Te6edf3AXP192_DCDC1Tb4b4b4, Te6edf3AXP202_OFFTb4b4b4)Tb4b4b4;
Te6edf3PMUTb4b4b4.Te6edf3setPowerOutPutTb4b4b4(Te6edf3AXP192_DCDC2Tb4b4b4, Te6edf3AXP202_OFFTb4b4b4)Tb4b4b4;
Te6edf3PMUTb4b4b4.Te6edf3setPowerOutPutTb4b4b4(Te6edf3AXP192_LDO2Tb4b4b4, Te6edf3AXP202_OFFTb4b4b4)Tb4b4b4;
Te6edf3PMUTb4b4b4.Te6edf3setPowerOutPutTb4b4b4(Te6edf3AXP192_LDO3Tb4b4b4, Te6edf3AXP202_OFFTb4b4b4)Tb4b4b4;
Te6edf3PMUTb4b4b4.Te6edf3setPowerOutPutTb4b4b4(Te6edf3AXP192_EXTENTb4b4b4, Te6edf3AXP202_OFFTb4b4b4)Tb4b4b4;
T8b949e/*
* Set the power of LoRa and GPS module to 3.3V
**/
Te6edf3PMUTb4b4b4.Te6edf3setLDO2VoltageTb4b4b4(T79c0ff3300Tb4b4b4)Tb4b4b4; T8b949e//LoRa VDD
Te6edf3PMUTb4b4b4.Te6edf3setLDO3VoltageTb4b4b4(T79c0ff3300Tb4b4b4)Tb4b4b4; T8b949e//GPS VDD
Te6edf3PMUTb4b4b4.Te6edf3setDCDC1VoltageTb4b4b4(T79c0ff3300Tb4b4b4)Tb4b4b4; T8b949e//3.3V Pin next to 21 and 22 is controlled by DCDC1
Te6edf3PMUTb4b4b4.Te6edf3setPowerOutPutTb4b4b4(Te6edf3AXP192_DCDC1Tb4b4b4, Te6edf3AXP202_ONTb4b4b4)Tb4b4b4;
T8b949e// Turn on SX1276
Te6edf3PMUTb4b4b4.Te6edf3setPowerOutPutTb4b4b4(Te6edf3AXP192_LDO2Tb4b4b4, Te6edf3AXP202_ONTb4b4b4)Tb4b4b4;
T8b949e// Turn off GPS
Te6edf3PMUTb4b4b4.Te6edf3setPowerOutPutTb4b4b4(Te6edf3AXP192_LDO3Tb4b4b4, Te6edf3AXP202_OFFTb4b4b4)Tb4b4b4;
Te6edf3pinModeTb4b4b4(Te6edf3PMU_IRQTb4b4b4, Te6edf3INPUT_PULLUPTb4b4b4)Tb4b4b4;
Te6edf3attachInterruptTb4b4b4(Te6edf3PMU_IRQTb4b4b4, Tb4b4b4[Tb4b4b4] Tb4b4b4{
T8b949e// pmu_irq = true;
Tb4b4b4}Tb4b4b4, Te6edf3FALLINGTb4b4b4)Tb4b4b4;
Te6edf3PMUTb4b4b4.Te6edf3adc1EnableTb4b4b4(Te6edf3AXP202_VBUS_VOL_ADC1 Tff7b72|
Te6edf3AXP202_VBUS_CUR_ADC1 Tff7b72|
Te6edf3AXP202_BATT_CUR_ADC1 Tff7b72|
Te6edf3AXP202_BATT_VOL_ADC1Tb4b4b4,
Te6edf3AXP202_ONTb4b4b4)Tb4b4b4;
Te6edf3PMUTb4b4b4.Te6edf3enableIRQTb4b4b4(Te6edf3AXP202_VBUS_REMOVED_IRQ Tff7b72|
Te6edf3AXP202_VBUS_CONNECT_IRQ Tff7b72|
Te6edf3AXP202_BATT_REMOVED_IRQ Tff7b72|
Te6edf3AXP202_BATT_CONNECT_IRQTb4b4b4,
Te6edf3AXP202_ONTb4b4b4)Tb4b4b4;
Te6edf3PMUTb4b4b4.Te6edf3clearIRQTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72return Tffa657trueTb4b4b4;
Tb4b4b4}
Tffa657void Te6edf3disablePeripheralsTb4b4b4(Tb4b4b4)
Tb4b4b4{
Te6edf3PMUTb4b4b4.Te6edf3setPowerOutPutTb4b4b4(Te6edf3AXP192_DCDC1Tb4b4b4, Te6edf3AXP202_OFFTb4b4b4)Tb4b4b4;
Te6edf3PMUTb4b4b4.Te6edf3setPowerOutPutTb4b4b4(Te6edf3AXP192_LDO2Tb4b4b4, Te6edf3AXP202_OFFTb4b4b4)Tb4b4b4;
Te6edf3PMUTb4b4b4.Te6edf3setPowerOutPutTb4b4b4(Te6edf3AXP192_LDO3Tb4b4b4, Te6edf3AXP202_OFFTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72#Tff7b72endif
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────